【发布时间】:2019-04-26 23:08:54
【问题描述】:
我正在使用 chunksize pd read_csv 读取 10Gb 文件,但我注意到 read_csv 的速度越来越慢。此外,经过一些迭代,我会收到一条关于“我的磁盘几乎已满”的警告消息。感觉 pd 在加载新数据块时不会删除旧内存。如果我能以某种方式告诉 python 在加载块大小数据帧并写出输出后,擦除该块的内存并用新块替换它,那就太好了
我把chunksize从10000改成了3000,read_csv()越来越慢的问题依然存在。读取文件块后,我对其进行一些操作(根据某些标准删除一些行)并将新输出写入 csv 文件。
for i in range(0, number_lines, chucksize):
read_all_cat=pd.read_csv(all_cat_file_name, error_bad_lines=False, sep='\\t', header=None, nrows=chucksize, skiprows=i, engine='python')
【问题讨论】:
-
您应该使用
pd.read_csv提供的正常分块操作,它基本上为您提供了一个生成器,您可以通过运行所有块来耗尽它。 -
nrow=chucksize 的效率远低于 chunksize=chucksize
-
我的意思是你只需要指定
chunksize,然后pandas就会处理迭代:见docs。使用reader = pd.read_csv('file_name', chunksize=3000)创建阅读器,然后执行for chunk in reader: ...之类的操作