使用文件读取的open 函数,让你的csv pandas 尾部插入快如闪电

简介

笔者在处理稍大型(几十万条)的csv文件时,发现在csv文件中,使用panda的loc方法进行拼接,速度太过于缓慢。
笔者提出使用open方法,处理完成后的数据每行以,进行分隔存储到文件中,程序运行速度比上述方法快200多倍。

from tqdm import tqdm
import pandas as pd

1. pandas loc 尾部插入方法

for _, row in tqdm(df.iterrows()):
    # 处理生成data列表
    new_df.loc[new_df.shape[0]] = value
new_df.to_csv('new.csv', index=False)

通常处理表格数据流程:

  1. 一行一行的遍历原始表格数据;
  2. 在新的new_df的尾部一行一行插入处理完成的数据;
  3. new_df 保存到本地

上述流程在处理小文件时,没有问题;

但当处理几十万行的文件时,随着程序运行,代码运行速度会越来越慢。

有人会认为这个是因为大文件把内存占满了,从而拖慢了程序的处理速度。
我想说的是:但当内存是足够时,每秒也才只能处理2000多条数据;依然没有下述open方法快。

在我的数据上,上述代码在进行pandas.DataFrame拼接时,随着程度执行,越来越慢,最后每秒只能处理200条数据;太过于慢了!

loc 尾部插入的速度

使用pandas 尾部插入的实验
在这里插入图片描述
如上图表示,在程序刚开始执行时,处理了7647条数据,用时2秒,平均每秒处理2108条;

然而,随着程序的运行,当程序运行2分钟后,如下图所示,程序处理了6万条数据,程序的处理速度下降到每秒221条;而且还在继续下降;
在这里插入图片描述

2. open 方法

open方法 处理csv的速度

当换成使用文件读取的open函数后,程序的处理速度一直可以保持在每秒处理 5万条数据

在这里插入图片描述
如上图所示,处理完全部的66万条数据,每秒处理5万多条,用时12秒全部处理完毕。

这个方法用来处理大文件非常好!

open方法 处理csv代码

csv 的数据是以,分隔,故在文件中逐行写入以,分隔的数据即可,甚至无需使用pandas包。

代码如下

with open('data.csv', 'w+', encoding='utf-8') as f:
    f.write(",".join(df.columns) + '\n')
    for _, row in tqdm(df.iterrows()):
        # 处理生成data列表
        ...
        
        f.write(','.join(data) + '\n')
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieshenai

为了遇见更好的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值