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

已对齐的DataFrame两列相除时出现NaN值的问题咨询

出现NaN的常见原因

  • 列数据类型为object,存在非数字隐藏字符
    你打印出来的A、B列数值看起来正常,但实际导入数据时可能带入了空格、千分位逗号、不可见特殊字符,导致列被识别为object类型而非数值类型,对应行无法做除法运算直接返回NaN。
    你可以先执行print(df[['A','B']].dtypes)确认类型,如果是object,执行以下代码清洗:
# 把列转为数值类型,无法转换的会被置为NaN
df['A'] = pd.to_numeric(df['A'], errors='coerce')
df['B'] = pd.to_numeric(df['B'], errors='coerce')
  • 索引不对齐导致除法运算返回NaN
    如果你在计算前对A列或B列做过筛选、重置索引等操作,两列索引不匹配时,df['B'].div(df['A'])会自动按索引对齐,匹配不上的位置就会返回NaN。
    可以直接按数组位置计算避免索引影响:
if_condition = df['A'] != 0
# 用.values取底层numpy数组,按位置计算
then = 1 - (df['B'].values / df['A'].values)
df['New Col'] = np.where(if_condition, then, 0)
  • 对应行的A/B列本身存在隐藏NaN
    部分情况下浮点数展示会隐藏NaN的显示,你可以执行print(df.loc[['Cat-1','Cat-5'], ['A','B']].isna())确认对应位置是否实际为NaN。

更稳妥的替代写法

你可以直接用pandas内置的方法处理除以0和NaN的情况,无需单独写np.where逻辑:

# rsub(1)等价于 1 - 除法结果,把除以0得到的inf和异常NaN都置为0
df['New Col'] = df['B'].div(df['A']).rsub(1).replace([np.inf, -np.inf], 0).fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:36:05