我编写了一个简单的小脚本来读取和处理一个巨大的 CSV 文件(~150GB),每个循环读取 5e6 行,将其转换为 Pandas DataFrame,对其执行某些操作,然后继续读取接下来的 5e6 行。
尽管它完成了这项工作,但每次迭代都需要更长的时间才能找到下一个要读取的行 block ,因为它必须跳过更多的行。 我读了很多关于使用 block (作为读取器迭代器)的答案,尽管一旦读取了 block ,我就需要连接这些 block 来创建一个数据帧(包含有关截断行和其他内容的各种问题),所以我我不想走那条路。
是否可以使用某种光标来提醒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
最佳答案
使用你的方法,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
关于python - 使用 pandas 迭代大型 csv(不使用 block ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46602613/