2017-05-09 159 views
2

我有一個需要修改的3GB csv文件。 我有,我想lambda函數適用於(應該改變行的值)熊貓適用於大型csv文件

我想到目前爲止是讀取CSV爲分塊的文件,但內存問題仍然發生

解決方案列

這是我試過到目前爲止:

dataframe = read_csv(file_path, iterator=True, chunksize=10000) 

for chunk in dataframe: 
    chunk['column_name'].apply(change_row_lambda_function) 

dataframe.to_csv(result_file_path, sep=',') 
+1

到底會發生什麼? –

+0

加載只有相關的列 – vks

+0

它只是在迭代完成之前引發內存錯誤(pandas.parser.TextReader._read_low_memory) –

回答

0

試試這個:

# write header (column names) 
read_csv(file_path, nrows=1).head(0).to_csv(result_file_path) 

dataframe = read_csv(file_path, iterator=True, chunksize=10000) 

for chunk in dataframe: 
    chunk['column_name'] = chunk['column_name'].apply(change_row_lambda_function) 
    chunk.to_csv(result_file_path, mode='a', header=None) 
+0

每當我保存到CSV它覆蓋文件,和一些在文件中間的程序仍然引發內存錯誤 –

+0

@JoeDoe:如果你將'mode ='a''傳遞給'to_csv'方法(就像MaxU做的那樣),它會追加數據。 –

+0

我認爲現在正在工作,但仍然存在問題。在最後一個塊被附加後,該程序引發low_memory。這種技術也可以處理較大的文件? –