【问题标题】:Improving Pandas read_csv speed in chunksize mode在 chunksize 模式下提高 Pandas read_csv 速度
【发布时间】: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: ... 之类的操作

标签: python pandas


【解决方案1】:

您可以在 for 循环结束时使用垃圾收集器。

import gc

for i in range(0, number_lines, chucksize):
    read_all_cat=pd.read_csv(file, **kwargs)
    # ...
    # other operations
    # ...

    del read_all_cat, other_variables
    gc.collect()

或者您可以使用pd.read_csv(**options) chunksize 选项,它可能会更有效。

【讨论】:

  • 谢谢。 gc 非常有帮助。我也将它用于其他代码进行内存清理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
相关资源
最近更新 更多