使用pandas迭代大型csv(不使用块)

时间:2017-10-06 09:29:41

标签: python pandas

我编写了一个简单的小脚本来读取和处理一个巨大的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

1 个答案:

答案 0 :(得分:3)

使用您的方法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