Pandas dataframe数据处理方法速度比较

本文对比了Pandas中处理大规模数据(500万行,100M文件)时,iloc, at, apply和直接使用Series方法的效率。结果显示,iloc速度最慢,耗时约5小时;at性能有所提升,耗时约10分钟;apply并未显著提升速度;而使用Series处理,时间降至37秒,成为最优选择。在进行DataFrame属性筛选时,应注意避免直接修改属性,而是操作其数值部分。" 103718287,7920029,深入学习swoole:从基础到实战,"['后端开发', 'php', 'swoole', '网络编程', '并发处理']
摘要由CSDN通过智能技术生成

数据修改主要以增删改差为主,这里比较几种写法在数据处理时间上的巨大差别。

数据量大概是500万行级别的数据,文件大小为100M。

1.iloc

iloc是一种速度极其慢的写法。这里我们对每个csv文件中的每一行循环再用iloc处理,示例代码如下:

for index in range(len(df)):

      df.iloc['attr'][index] = xxx

使用这种方法对五百万行的数据进行处理大概需要5个小时,实在是很慢。

2.at

at相比于iloc有了很大的性能提升,也是for循环处理,示例代码如下:

for i in range(len(df)):
    if df.at[i,'attr'] > 0:
       sum_positive += df.at[i,'attr']
    else:
        sum_negetive += df.at[i,'sttr']

在我的程序里at和iloc是可以通用的,用at,程序的速度会有大幅提高,大概10分钟,但是还不够。

3.apply(lambda x:...)

想说apply是因为我觉得for循环速度太慢,想在循环上对程序进行优化。然后网上有人说apply可以大幅度提升速度,然而经过测试发现在我的程序里,使用apply和for差不多吧,性能也一般。

4.直接用series处理

这才是真正优化for循环的方法,以上面at的程序为例,可以改写为:


                
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值