web-dev-qa-db-ja.com

Panda Dataframesをcsvファイルにチャンクで書き込む

大きなデータファイル(1M行x 20列)のセットがあります。ただし、そのデータの5列程度しか興味がありません。

これらのファイルのコピーを関心のある列のみで作成することで物事が簡単になると思いますので、後処理のために作業するファイルが小さくなります。

私の計画は、ファイルをデータフレームに読み込み、csvファイルに書き込むことでした。

私は大きなデータファイルをデータフレームにまとめて読み込むことを検討してきました。

しかし、データをcsvファイルにチャンクで書き出す方法については何も見つかりませんでした。

ここに私が今試しているものがありますが、これはcsvファイルを追加しません:

with open(os.path.join(folder, filename), 'r') as src:
    df = pd.read_csv(src, sep='\t',skiprows=(0,1,2),header=(0), chunksize=1000)
    for chunk in df:
        chunk.to_csv(os.path.join(folder, new_folder,
                                  "new_file_" + filename), 
                                  columns = [['TIME','STUFF']])

試してください:

chunk.to_csv(os.path.join(folder, new_folder, "new_file_" + filename), cols = [['TIME','STUFF']], mode='a')

mode='a'は、pandasを追加します。

12
Scratch'N'Purr

to_csvメソッドのchunksize引数を確認してください。 ここ はドキュメントです。

ファイルへの書き込みは次のようになります。

df.to_csv("path/to/save/file.csv", chunksize=1000, cols=['TIME','STUFF'])
13
Alex

興味のある列だけを読んで保存してみませんか?

file_in = os.path.join(folder, filename)
file_out = os.path.join(folder, new_folder, 'new_file' + filename)

df = pd.read_csv(file_in, sep='\t', skiprows=(0, 1, 2), header=0, names=['TIME', 'STUFF'])
df.to_csv(file_out)
1
Alexander