【发布时间】:2018-03-14 23:57:02
【问题描述】:
我有一个庞大的数据集,需要将其写入 csv 到共享文件驱动器中。 我以前这样做过,并且处理过相同的数据。 这次唯一的区别是我把分隔符从逗号“,”改成了分号“;”,但这应该不会改变什么吧?
我的数据是熊猫数据框;它有字符串列和数字列。大约有 1600 万行,大约 20 列。
这是我编写的将数据分块写入 csv 文件的函数:
def write_to_csv_in_chunks(input_data, file_path, chunk_size=1000000):
total_rows = len(input_data)
current_row = 0
while (current_row + chunk_size) < total_rows:
end_row = current_row + chunk_size
subset_data = input_data[current_row:end_row-1]
subset_data.to_csv(os.path.join(file_path, 'row '+ str(current_row) + ' to row '
+ str(end_row-1) + '.csv'))
current_row = end_row
print('finished writing file up to row ', current_row)
subset_data = input_data[current_row:]
subset_data.to_csv(os.path.join(file_path, 'row '+ str(current_row) + ' to last row.csv'),
sep=';', index=False)
return print('all files finished writing')
这是我调用函数:
write_to_csv_in_chunks(input_data=data_all, file_path=baseDir)
但是当我在写入数据的步骤时,我不断收到超时错误。 (我知道这一点是因为我在调用 write to csv 函数之前有一个打印语句):
Traceback (most recent call last):
File "/Users/Documents/distance_analysis serial.py", line 195, in <module>
write_to_csv_in_chunks(input_data=data_all, file_path=baseDir)
File "/Users/Documents/helping_fxns.py", line 67, in write_to_csv_in_chunks
+ str(end_row-1) + '.csv'))
File "/Users/Documents/python3/lib/python3.6/site-packages/pandas/core/frame.py", line 1524, in to_csv
formatter.save()
File "/Users/Documents/python3/lib/python3.6/site-packages/pandas/io/formats/format.py", line 1656, in save
f.close()
TimeoutError: [Errno 60] Operation timed out
非常感谢任何帮助!
PS:我对该主题进行了研究,但实际上找不到任何东西。也许我没有正确搜索;也将不胜感激。
【问题讨论】:
-
你为什么一次写一行?
-
@StephenRauch 哦!我不是。我一次写 100 万行。
-
您写文件花了多长时间?因为我有 1300 万行的类似问题,但它总是挂起