ランダムの森

20代エンジニアです。プログラミングについて主に書いてます。

pandasでサイズの大きいファイルの読み込み方

kaggleのファイルが大きすぎてpandasでまとめて読み込めなかったのでその時の対処法をメモ。
今回はCSVファイルを使っています。もうこの時点でナンセンスなのかもしれない。笑

普通にCSVファイル読み込むときはこんな感じ。

df = pd.read_csv('train.csv')

しかし、ファイルがでかすぎてメモリ不足のエラーが出る。

そこで、ファイルを分割して読み込んでからデータフレームをがっちゃんこさせる作戦。
以下のようにファイルを読み込ませます。chunksizeと指定することにより指定サイズ分の列ごとに取り出すTextFileReaderのインスタンスを作る。

df1_instance = pd.read_csv('train.csv',chunksize = 10)
df1_instance

output>
pandas.io.parsers.TextFileReader at 0x10470ca58

このインスタンスからデータフレームを取り出すために.get_chunk()メソッドを使う。

df1_instance.get_chunk()

output>
f:id:doreikaiho:20190112223347p:plain:w50

TextFileReaderは読み込んだ位置を覚えているので、もう一回同じことをすると次の塊をデータフレームとして読み込む。

df1_instance.get_chunk()

output>
f:id:doreikaiho:20190112223358p:plain:w70

最後に分割したデータフレームをがっちゃんこさせる。
for文でループさせるとでーたフレームの一番終わりのところまで読んでくれる。
indexが重複しないようにignore_index=Trueも忘れずに。

df = pd.concat((r for r in df_instance), ignore_index=True)