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

Python中df.groupby.sum()返回NaN问题求助

解决DataFrame分组求和后出现NaN的问题

可能的原因及对应解决方案

1. 分组键Temperature存在隐形格式差异

看起来相同的温度值,实际可能是不同数据类型(如25和25.0)、带空格/不可见字符的字符串,或是浮点精度差异(如25.0000001和25.0),导致分组后生成了独立的组,进而出现求和结果为NaN的情况。

解决方法:

  • 统一数据类型:
    # 转换为数值类型,若有无法转换的项会报错(确保原数据无非法值)
    df['Temperature'] = pd.to_numeric(df['Temperature'], errors='raise')
    
  • 处理浮点精度:
    # 根据实际精度需求保留小数位,消除微小差异
    df['Temperature'] = df['Temperature'].round(2)
    
  • 清理字符串型温度值:
    # 去除首尾空格和不可见字符
    df['Temperature'] = df['Temperature'].str.strip()
    

2. time_spent列非数值类型

如果time_spent是字符串格式(比如带"小时"单位,或存储为字符串数字),即使没有NaN,sum()操作也无法正确计算数值,会返回NaN。

解决方法:

  • 清理并转换为数值类型:
    # 若列中包含单位,先移除单位再转换
    df['time_spent'] = df['time_spent'].str.replace('小时', '').astype(float)
    # 直接转换字符串数字为数值(报错模式确保无非法值)
    df['time_spent'] = pd.to_numeric(df['time_spent'], errors='raise')
    

3. 分组时未指定目标列

直接使用groupby().sum()会对所有数值列求和,若Temperature是数值型,可能干扰结果显示。建议明确指定求和的列,避免歧义。

优化后的分组代码:

# 仅对time_spent列求和,结果更清晰
df_copy = df.groupby('Temperature', as_index=False)['time_spent'].sum()

快速排查步骤

  1. 检查列数据类型:

    print(df.dtypes)
    

    若Temperature或time_spent为object类型,优先处理类型转换。

  2. 查看Temperature的唯一值是否异常:

    print(df['Temperature'].unique())
    

    观察是否有明显格式不一致的数值或字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:01:13