【问题标题】:Iterate through large csv using pandas (without using chunks)使用 pandas 遍历大型 csv(不使用块)
【发布时间】:2017-10-06 17:33:33
【问题描述】:

我编写了一个简单的小脚本来读取和处理一个巨大的 CSV 文件(~150GB),每个循环读取 5e6 行,将其转换为 Pandas DataFrame,对其进行处理,然后继续读取接下来的 5e6 行。

尽管它完成了这项工作,但在每次迭代中,查找下一个要读取的行块需要更长的时间,因为它必须跳过更多的行。 我阅读了许多关于使用块(作为读取器迭代器)的答案,尽管一旦读取了块,我就需要连接块以创建一个 DataFrame(关于截断行和东西的各种问题),所以我不想走那条路。

是否可以使用某种光标来提醒 read_csv 函数从它停止的位置开始读取?

代码的主要部分如下所示:

while condition is True:
    df = pd.read_csv(inputfile, sep=',', header = None, skiprows = sr, nrows = 5e6)
    # do something with df
    sr = sr + 5e6
    # if something goes wrong the condition turns False

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用您的方法,Pandas 将不得不一次又一次地从头开始读取这个巨大的 CSV 文件以跳过行...

    我认为你确实想使用chunksize 参数:

    reader = pd.read_csv(inputfile, sep=',', header=None, chunksize=5*10**6)
    
    for df in reader:
        # do something with df
        if (something goes wrong):
            break
    

    【讨论】:

    • 是的!我确实尝试过使用 chunksize 参数,但由于某种原因,它在将其转换为 DataFrame 时不起作用。非常感谢!
    猜你喜欢
    • 2019-08-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2017-08-30
    • 1970-01-01
    相关资源
    最近更新 更多