2017-05-09 157 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。这种技术也可以处理较大的文件? –