python - 使用 pandas 迭代大型 csv(不使用 block )

标签 python pandas

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

相关文章:

python - 根据特定列中的负值或 np.nan 值将数据帧拆分为 block

python - 在 Pandas 中使用 data.info() 显示所有信息

Python OS - 检查文件是否存在,如果存在则重命名,再次检查,然后保存

python - python日期字符串操作的有效方法

python - Pandas 避免重复求和

python - 为 pandas 数据框中逗号分隔字符串中的每个项目添加 +1

python - Python中的替换功能不起作用(其他答案没有解决我的问题)

python - Pandas:将 WinZipped csv 文件转换为 Data Frame

python - Django 将 urls.py 拆分为子模块

python - 根据具有条件的其他列的值在 pandas 中添加列