【问题标题】:Read in csv file faster更快地读取 csv 文件
【发布时间】:2017-02-15 15:55:30
【问题描述】:

我目前正在读取一个大型 csv 文件(大约 1 亿行),使用的命令与https://docs.python.org/2/library/csv.html 中描述的行一致,例如:

import csv
with open('eggs.csv', 'rb') as csvfile:
     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
     for row in spamreader:
          process_row(row)

这证明相当慢,我怀疑是因为每一行都是单独读入的(需要对硬盘驱动器进行大量读取调用)。有什么方法可以一次读取整个 csv 文件,然后对其进行迭代?虽然文件本身很大(例如 5Gb),但我的机器有足够的内存来保存它。

【问题讨论】:

  • 该代码不是一次读取文件一行。输入在适当大小的缓冲区中读取。
  • 它很可能是因为 RAM 使用而变慢。解析后,一个 5GB 的文件可能需要超过 5GB 的 RAM。
  • 是的 - 在我的机器崩溃之前,它很快就使用了 26gb 的内存!经验教训...

标签: python csv


【解决方案1】:
import pandas as pd
df =pd.DataFrame.from_csv('filename.csv')

这会将其作为 pandas 数据框读入,因此您可以用它做各种有趣的事情

【讨论】:

【解决方案2】:

我的机器有足够的内存来保存它。

那么,在迭代器上调用list

spamreader = list(csv.reader(csvfile, delimiter=' ', quotechar='|'))

【讨论】:

    【解决方案3】:

    是的,有一种方法可以一次读取整个文件:

    with open('eggs.csv', 'rb', 5000000000) as ...:
        ... 
    

    参考:https://docs.python.org/2/library/functions.html#open

    【讨论】:

      【解决方案4】:

      如果你的 csv 文件比你的内存大,那么你可以使用

      • DASK(Dask 是 Python 的并行计算和数据分析库。它支持针对计算和大数据收集优化的动态任务调度。)

      Dask Dataframe 来自Dask Official ... Dask Wikipedia

      使用 dask 数据框,即使您有大数据集也可以进行数据分析

      【讨论】:

        猜你喜欢
        • 2021-04-16
        • 2017-03-26
        • 2015-08-07
        • 2020-01-23
        • 2011-06-18
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多