私のサーバは8GBのRAMを搭載しており、csvファイルをデータフレームに読み込むためにpandas read_csv関数を使用していますが、csvサイズ900MB以上Pandas pd.read_csvが900MBを超えるcsvファイルで動作しない
このような状況にお役立てください。私が取得するために私は、meminfoを添付しています がサーバー Memory info image
私のサーバは8GBのRAMを搭載しており、csvファイルをデータフレームに読み込むためにpandas read_csv関数を使用していますが、csvサイズ900MB以上Pandas pd.read_csvが900MBを超えるcsvファイルで動作しない
このような状況にお役立てください。私が取得するために私は、meminfoを添付しています がサーバー Memory info image
上のメモリをクリアする方法についてアドバイス(あなたは、あなたが入力している、とあなたが受信しているエラーの種類どのようなコードについて、もう少し具体的にする必要があります。 )
pandas
が大きすぎるファイルで動作しない場合は、より基本的なcsv
パッケージに戻す必要があります。このように快適に感じるなら、DataFrameでインポートすることもできます。以下のような
何か:
with open("file.csv", 'rb') as csv_file:
reader = csv.reader(csv_file, delimiter=',')
df = pd.DataFrame(list(reader))
pandas
は、大きなファイルのためのイテレータを返すことができます。
import pandas as pd
foo = pd.read_csv('bar.csv', iterator=True, chunksize=1000)
これはイテレータを返します。その後、forループを使用してチャンク内のデータに操作を適用できます。したがって、ファイル全体を一度にメモリに読み込むことはありません。チャンクサイズは、チャンクあたりの行数です。
それはこのようなものになります。
for chunk in foo:
# do something with chunk
EDIT:あなたにもチャンクでunique
のような関数を適用する必要があります、私の知る限り。
import numpy as np
unique_foo = []
for i in df:
unique_foo.append(i['foo'].unique())
unique_foo = np.unique(unique_eff)
私はこのメソッドを適用していますが、どのようにしてこれらのチャンクを集めて、完全なデータ内の一意の要素を見つけるような操作を適用できますか。これで助けてくれますか? – Aakarsh
@Aakarsh私の編集された答えを見てください。実際の 'DataFrame'オブジェクトは' forループ 'でしか公開されていないので、これを行う必要があります –
まだ私はデータフレームのプロセスに私のcsvファイルのサイズを殺すと読み取ることができません約1001 MBです。 – Aakarsh
'pandas'を使わずに試しましたか? 'df = list(reader)' – Laurent
それはどちらの方法でも動作せず、出力として「Killed」を取得します。 – Aakarsh