如何使用pandas.df.at[]批量修改DataFrame列中所有元素?
高效批量设置DataFrame列值的方法
针对你的需求,有两种高效且简便的方法可以一次性将A列所有元素设为100,完全不用逐行操作:
方法一:直接列赋值
这是最简洁且性能最优的方式,利用Pandas的矢量化操作特性,底层会做优化,大数据集下速度极快:
df['A'] = 100
方法二:使用loc批量赋值
如果你需要更明确地指定行范围(这里是所有行),也可以用loc,同样是矢量化操作,效率和直接列赋值几乎一致:
df.loc[:, 'A'] = 100
为什么这两种方法比逐行at更好?
你之前用的逐行df.at[index, 'A']属于逐个元素赋值,本质是循环操作,在大型数据集下会产生大量Python层面的循环开销,运行效率极低。而上面的两种方法都是矢量化批量操作,直接在底层(C语言级别)处理整列数据,能大幅减少运行时间,完全适配你的大数据集场景。
另外你提到iloc会增加运行时间,其实如果是用df.iloc[:, 0] = 100这种整列赋值的方式,效率也不会差,但相比直接列名赋值或loc,可读性稍差(需要记住列的索引位置),所以更推荐前两种方法。
内容的提问来源于stack exchange,提问作者Danny Xu
相关产品推荐
相关产品推荐

