web-dev-qa-db-ja.com

dask.dataframeのメタデータを指定する方法

ドキュメントは良い例を示しています メタデータを提供する方法 。ただし、データフレームに適切なdtypeを選択することに関しては、まだ確信が持てません。

  • meta={'x': int 'y': float, 'z': float} の代わりに meta={'x': 'i8', 'y': 'f8', 'z': 'f8'}
  • 誰かが 'i8'のような可能な値のリストを教えてくれませんか?どんなdtypeが存在しますか?
  • 任意のオブジェクトを含む列をどのように指定できますか? 1つのクラスのインスタンスのみを含む列を指定するにはどうすればよいですか?
16
Arco Bast

利用可能な基本的なデータ型は、numpyを通じて提供されるものです。リストについては documentation をご覧ください。

このセットに含まれていないのは日時形式です(例:datetime64)。追加情報は pandas および numpy のドキュメントに記載されています。

Daskデータフレームのメタ引数は、通常、列、インデックス、およびdtypeの定義を保持する空のpandasデータフレームを期待します。

このようなDataFrameを構築する1つの方法は次のとおりです。

import pandas as pd
import numpy as np
meta = pd.DataFrame(columns=['a', 'b', 'c'])
meta.a = meta.a.astype(np.int64)
meta.b = meta.b.astype(np.datetime64)

pandasデータフレームのコンストラクタにdtypeを提供する方法もありますが、それぞれの列にそれらを提供する方法がわかりません。ご覧のように、データ型の「名前」だけでなく、実際のnumpy dtypeも提供します。

あなたの最後の質問に関して、あなたが探しているデータ型は「オブジェクト」です。例えば:

import pandas as pd

class Foo:
    def __init__(self, foo):
        self.bar = foo

df = pd.DataFrame(data=[Foo(1), Foo(2)], columns=['a'], dtype='object')
df.a
# 0    <__main__.Foo object at 0x00000000058AC550>
# 1    <__main__.Foo object at 0x00000000058AC358>
8
sim

Dask.dataframeとPandasはNumPy dtypesを使用します。特に、 np.dtype に渡すことができるものの中には、次のものが含まれます。

  1. np.float64などのNumPy dtypeオブジェクト
  2. floatなどのPythonタイプオブジェクト
  3. 'f8'などのNumPy dtype文字列

以下は、NumPyドキュメントから抜粋したより広範なリストです。 http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#specifying-and-constructing-data-types

4
MRocklin