【发布时间】:2017-04-01 07:34:56
【问题描述】:
我猜这是一个简单的解决方法,但我遇到了一个问题,即使用 to_csv() 函数将 pandas 数据帧保存到 csv 文件需要将近一个小时。我将 anaconda python 2.7.12 与 pandas (0.19.1) 一起使用。
import os
import glob
import pandas as pd
src_files = glob.glob(os.path.join('/my/path', "*.csv.gz"))
# 1 - Takes 2 min to read 20m records from 30 files
for file_ in sorted(src_files):
stage = pd.DataFrame()
iter_csv = pd.read_csv(file_
, sep=','
, index_col=False
, header=0
, low_memory=False
, iterator=True
, chunksize=100000
, compression='gzip'
, memory_map=True
, encoding='utf-8')
df = pd.concat([chunk for chunk in iter_csv])
stage = stage.append(df, ignore_index=True)
# 2 - Takes 55 min to write 20m records from one dataframe
stage.to_csv('output.csv'
, sep='|'
, header=True
, index=False
, chunksize=100000
, encoding='utf-8')
del stage
我已确认硬件和内存正常工作,但这些表相当宽(约 100 列),主要包含数字(十进制)数据。
谢谢,
【问题讨论】:
-
硬件瓶颈。密切关注您的磁盘吞吐量,并检查是否有空的磁盘空间。
-
正如我所提到的,我确实检查了磁盘空间,并且可以以预期的速度将大文件复制到驱动器。另外,我应该提到我正在写入 SSD(三星 950)
-
尝试不使用
chunksizekwag... 这可能是很多事情,例如报价、价值转换等。尝试profile 看看它大部分时间都花在了哪里。 -
有什么更新吗?我最近遇到了类似的问题
-
我在 pci express 上有一个 ssd 并面临同样的问题。在这种情况下,硬件不应该是瓶颈......
标签: python csv pandas dataframe