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

为何DataFrame索引相同时按列除法仍返回全NaN值?

为什么df.div(df['D'], axis=1)返回全NaN,而axis=0正常?

问题核心是对div方法的axis参数及Pandas对齐逻辑的理解偏差:

  • df['D']是行索引为0、1、2的Series,它没有列标签。
  • 当设置axis=1时,div会按列标签对齐:DataFrame的列是A、B、C、D,而Series的索引是0、1、2,两者没有匹配的列标签,所有位置都无法完成对齐计算,结果全为NaN,同时Series的索引会被当作新列添加到结果里(就是你看到的0、1、2列)。
  • 当设置axis=0时,div按行索引对齐:DataFrame和Series的行索引完全一致(0、1、2),每一行的元素都能和对应行的D值完成除法运算,得到预期结果。

另外注意,你写的df.astype(float)没有赋值,不会改变原DataFrame的类型,应该改成df = df.astype(float)(不过这不是导致NaN的原因)。

如果你想实现「每列元素除以对应行的D列值」,正确写法就是你用到的axis=0,也可以用更直接的广播写法:

result = df / df['D'].values[:, None]

你的测试代码及结果:

data = {'A': [2, 3, 4], 'B': [10, 20, 30], 'C': [5, 4, 1], 'D': [1, 1, 1]}

# 创建DataFrame
df = pd.DataFrame(data)
df = df.astype(float)  # 修正:添加赋值操作

# 每列除以D列
result_col = df.div(df['D'], axis=1)
result_row = df.div(df['D'], axis=0)

print(result_col)
print(result_row)

运行结果:

A   B   C   D   0   1   2
0 NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN
A     B    C    D
0  2.0  10.0  5.0  1.0
1  3.0  20.0  4.0  1.0
2  4.0  30.0  1.0  1.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:42:56