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