如何用Pandas一行命令为多列赋值?该写法能减少三倍耗时吗?
如何用Pandas一行命令给多列赋值?
嘿,这个问题问得很实用!咱们先解决合并赋值的问题,再聊聊时间消耗的事儿~
首先得提个小细节:你原来写的df['column_a'][index] = 1这种链式索引写法,容易触发Pandas的SettingWithCopyWarning(因为可能在操作数据副本而非原DataFrame),所以更推荐用.loc来做定位赋值,这也是合并多列赋值的标准姿势。
合并成一行的两种常用方法:
方法一:列列表对应值列表
用.loc定位目标行和列,一次性完成赋值:df.loc[index, ['column_a', 'column_b', 'column_c']] = [1, 2, 3]注意列的顺序要和值的顺序严格对应哦。
方法二:字典映射列与值
如果想让列和值的对应关系更清晰,也可以用字典来赋值:df.loc[index] = {'column_a': 1, 'column_b': 2, 'column_c': 3}这种方式不用纠结顺序,而且如果只需要给部分列赋值,其他列会自动保留原有值(前提是
index对应的行已存在)。
关于时间消耗的问题:
不会刚好是“三倍更少”,但确实会比三次单独赋值高效很多。原因很简单:
- 三次单独赋值时,每次都要重复做行索引查找、列定位,还有Pandas内部的视图/副本检查,这些都是重复开销;
- 合并成一次操作后,只需要做一次行索引定位,批量处理多列赋值,直接减少了重复的系统调用和数据访问操作。
具体的效率提升幅度会和你的DataFrame规模有关,但肯定是单次批量赋值的速度更快。
内容的提问来源于stack exchange,提问作者Vincent Roye
相关产品推荐
相关产品推荐

