問題

pd.read_csv()を使用してファイルを反復的にチャンクするにはどうすればよいですか? 私が全体を読んだかのようにdtypeと他のmeta-informationを保持する 一度にデータセット?

メモリに収まるには大きすぎるデータセットを読み込む必要があります。 pd.read_csvを使用してファイルをインポートし、すぐにチャンクをhdfstoreに追加したいと思います。ただし、データ型推論は後続のチャンクについて何も知らない。

テーブルに格納されている最初のチャンクにintのみが含まれ、その後のチャンクにfloatが含まれている場合、例外が発生します。だから私は最初にread_csvを使ってデータフレームを反復し、最も高い推論型を保持する必要があります。さらに、オブジェクト型については、これらがテーブル内の文字列として格納されるので、最大長を保持する必要があります

データセット全体を読み込まずにこの情報のみを保持するパンドニックな方法はありますか?

  ベストアンサー

私はそれがこの直感的だとは思わなかった、そうでなければ私はその質問を投稿しなかっただろう。しかし、もう一度、パンダは物事を風にします。しかし、この情報は大きなデータを扱う他の人にとって便利かもしれないので、質問を維持する:

 In [1]: chunker = pd.read_csv('DATASET.csv', chunksize=500, header=0)

# Store the dtypes of each chunk into a list and convert it to a dataframe:

In [2]: dtypes = pd.DataFrame([chunk.dtypes for chunk in chunker])

In [3]: dtypes.values[:5]
Out[3]:
array([[int64, int64, int64, object, int64, int64, int64, int64],
       [int64, int64, int64, int64, int64, int64, int64, int64],
       [int64, int64, int64, int64, int64, int64, int64, int64],
       [int64, int64, int64, int64, int64, int64, int64, int64],
       [int64, int64, int64, int64, int64, int64, int64, int64]], dtype=object)

# Very cool that I can take the max of these data types and it will preserve the hierarchy:

In [4]: dtypes.max().values
Out[4]: array([int64, int64, int64, object, int64, int64, int64, int64], dtype=object)

# I can now store the above into a dictionary:

types = dtypes.max().to_dict()

# And pass it into pd.read_csv fo the second run:

chunker = pd.read_csv('tree_prop_dset.csv', dtype=types, chunksize=500)
 

  同じタグがついた質問を見る

pythontype-conversionpandashdfstore