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

在Pandas中执行除法及创建ratio列时出现NaN的解决方法

Pandas中计算ratio列出现NaN的解决办法

先排查问题根源

  • 检查amount列最后一个值:执行df['amount'].iloc[-1],确认是否为0或NaN——如果是0,除法会得到无穷大(inf);如果是NaN,整个ratio列都会返回NaN。
  • 检查amount列是否存在缺失值:执行df['amount'].isna().sum(),统计缺失值数量,缺失值转float后参与除法也会生成NaN。

针对性解决步骤

  • 如果最后一个值是NaN或0
    • 若为NaN:先填充缺失值,比如用前向填充保留趋势:df['amount'] = df['amount'].fillna(method='ffill'),或用列均值填充:df['amount'] = df['amount'].fillna(df['amount'].mean());之后再取最后一个有效值。
    • 若为0:要么替换0为非零有效值(比如df['amount'] = df['amount'].replace(0, df['amount'].mean())),要么调整逻辑取倒数第二个有效值:last_valid_amount = df['amount'].dropna()[df['amount'] != 0].iloc[-1]。
  • 如果amount列存在缺失值
    • 直接删除含缺失值的行:df = df.dropna(subset=['amount']),适合缺失值占比极低的情况;或按上述方式填充后再计算。
  • 确保除法操作逻辑正确
    先提取最后一个有效非空非零值,再执行除法,避免因单个无效值导致整列出错:
    # 获取最后一个有效值
    last_valid_amount = df['amount'].dropna()[df['amount'] != 0].iloc[-1]
    # 计算ratio列
    df['ratio'] = df['amount'].astype(float) / last_valid_amount
    

完整示例

import pandas as pd

# 构造带缺失值的测试数据
df = pd.DataFrame({'amount': [15, 30, 45, None, 60]})

# 填充缺失值(前向填充)
df['amount'] = df['amount'].fillna(method='ffill')

# 过滤掉0和NaN,取最后一个有效值
last_valid = df['amount'].dropna()[df['amount'] != 0].iloc[-1]

# 计算ratio列
df['ratio'] = df['amount'].astype(float) / last_valid

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:30:09