8

pd.read_csv() を使用してファイルを繰り返しチャンクし、データセット全体を一度に読み取ったかのように dtype やその他のメタ情報を保持するにはどうすればよいですか?

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

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

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

4

1 に答える 1

11

こんなに直感的だとは思いませんでした。そうでなければ、質問を投稿しなかったでしょう。しかし、繰り返しになりますが、パンダは物事を簡単にします。ただし、この情報は、大規模なデータを扱う他の人にとって役立つ可能性があるため、質問を続けます。

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)
于 2013-03-21T19:41:15.230 に答える