You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame设置列名后iloc乘法出现NaN的原因及解决方法

原因分析

pandas中DataFrame与Series执行算术运算时,默认会将Series的索引与DataFrame的列索引做对齐匹配,匹配不到的位置就会返回NaN:

  • test1中df.iloc[:, 0:3]的列索引是整数[0,1,2],和df['Count']这个Series的行索引(0~9的连续整数)恰好能匹配到前3个值,所以巧合返回了符合预期的有效值,本质上这种写法的逻辑也是不严谨的。
  • test2中df.iloc[:, 0:3]的列索引是字符串['find','a','b'],和df['Count']的整数行索引完全无法匹配,所以运算后全部返回NaN。
第二段代码修改方案

你只需要指定运算时Series沿列方向对齐(也就是匹配行索引,沿列广播)即可,有两种常用改法:

  1. 显式指定乘的方向,用pandas.DataFrame.mul的axis参数:
df.iloc[:, 0:3] = df.iloc[:, 0:3].mul(df['Count'], axis=0)
  1. 直接取Series的numpy数组运算,跳过索引对齐逻辑:
df.iloc[:, 0:3] *= df['Count'].values
是否需要始终用mul方法

不需要强制所有场景都用mul,但建议符合以下任意一种情况时优先用mul/add这类显式算术方法:

  • 需要控制对齐规则、广播方向时
  • 列索引/行索引存在类型、命名不一致的可能时
  • 代码需要更高可读性、可维护性时
    如果你的操作完全是按位置运算、不需要索引对齐,直接用.values取数组运算也非常高效。

内容的提问来源于stack exchange,提问作者sam_doggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:45:03