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

用Pandas多列除以另一列结果全为NaN,原因何在?

问题原因及解决方案

核心原因:Pandas的索引对齐机制

当你执行df[["b", "c"]] / df["a"]时,Pandas默认会按照列索引进行对齐运算:

  • df[["b", "c"]]是列索引为["b", "c"]的DataFrame
  • df["a"]是行索引为[0]的Series,在与DataFrame运算时,Pandas会把这个Series的行索引标签当作列名去匹配DataFrame的列

因为两者的索引标签完全不匹配(DataFrame没有名为0的列,Series也没有对应b、c的索引),所以运算后所有位置都返回NaN,同时Pandas会把Series的索引标签0作为新列加入结果,就出现了你看到的三列全NaN的情况。

解决方法

有几种简单的方式可以实现你预期的逐行除法:

  1. 转为numpy数组跳过索引对齐
    把df["a"]转为numpy数组,这样Pandas会直接按元素广播运算,忽略索引:
df[["b", "c"]] / df["a"].values

输出:

b    c
0  2.0  3.0
  1. 指定按行对齐运算
    使用div()方法并设置axis=0,明确告诉Pandas按行索引对齐,让每行的b、c值除以该行的a值:
df[["b", "c"]].div(df["a"], axis=0)

同样能得到正确的运算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:42:47