使用pandas遍历csv表格数据的效率问题(df.loc/iloc与df.at/iat的异同)

背景

    在处理数据量较大的表格(25万行)时,需要遍历表格中的每个值,前期使用df.loc进行遍历,不仅非常耗时,而且运行十几个小时程序经常崩溃。。。

解决方法

    在网上搜索解决方案,使用df.at代替df.loc后,与之前十几个小时相比,现在几分钟就全部遍历完成!!!

    特地搜索了一下loc与at的区别,loc和at都是利用index和列名进行检索,但at更快

    df.iloc/loc的优势在于可以灵活的对数据进行切片或选择性提取多个数值,例如:

df.loc[1:10,'weight']
df.loc[[1,3,6],'weight']

    虽然df.at/iat仅能进行单个值的提取,但是在对大量数据进行逐个遍历的场景下,效率才是第一生产力!

for i in range(len(str2num_list)):
    for j in range(len(data[str2num_list[i]])):
        if type(df.iat[j,i]) == str:
            df.iat[j,i] = 0   #此处使用df.iloc将大大降低效率

引用pandas.DataFrame.at官方文档

Access a single value for a row/column label pair.

Similar to loc, in that both provide label-based lookups. Use at if you only need to get or set a single value in a DataFrame or Series.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值