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

Python中DataFrame两列相减返回NaN值的问题求助

排查Pandas两DataFrame列计算全为NaN的原因

你遇到的问题核心是Pandas的索引对齐机制导致的,以下是具体排查方向和解决办法:

1. 两个DataFrame的索引完全不匹配

Pandas在对不同DataFrame的列执行运算时,会默认按索引标签对齐。如果df_kro_emu和df_kro_bom_metro的索引没有任何重叠值,运算后所有位置都会生成NaN。

验证方式:

# 检查两个索引的交集
print(df_kro_emu.index.intersection(df_kro_bom_metro.index))
# 查看各自的索引结构
print(df_kro_emu.index)
print(df_kro_bom_metro.index)

解决办法:

如果不需要保留原索引,重置索引后再计算:

# 重置索引并丢弃原索引
df_kro_emu = df_kro_emu.reset_index(drop=True)
df_kro_bom_metro = df_kro_bom_metro.reset_index(drop=True)
df_kro_emu['Metro_Misc'] = df_kro_emu['Numeric_Category'] - df_kro_bom_metro['Numeric_Category']

2. 两个DataFrame行数不一致

即使有部分索引重叠,但如果两个DataFrame的总行数不同,未对齐的行仍会生成NaN。若恰好没有任何索引匹配,结果就会全为NaN。

验证方式:

# 打印两个DataFrame的行数
print(f"df_kro_emu行数:{len(df_kro_emu)}")
print(f"df_kro_bom_metro行数:{len(df_kro_bom_metro)}")

解决办法:

确保两个DataFrame行数一致后再运算,或者使用values直接取底层数组按位置计算(不依赖索引):

# 按位置运算,需确保行数完全一致,否则会报错
df_kro_emu['Metro_Misc'] = df_kro_emu['Numeric_Category'].values - df_kro_bom_metro['Numeric_Category'].values

3. 索引被意外修改

如果其中一个DataFrame之前执行过筛选、分组、合并等操作,可能导致索引被打乱(比如变成非连续整数、字符串索引等),进而引发对齐失败。

验证方式:

检查索引的类型和连续性:

# 查看索引类型和值
print(type(df_kro_emu.index))
print(df_kro_emu.index[:5])
print(type(df_kro_bom_metro.index))
print(df_kro_bom_metro.index[:5])

解决办法:

重置索引恢复连续整数索引,再执行运算(同方法1的重置索引操作)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:28:14