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

Pandas按weight_conversion分组求和sales_units结果异常解决方法

问题根因

你遇到的异常由两个问题共同导致:

  • 列名拼写错误:你的代码中引用的列名是Sales_Unit,但实际DataFrame中的列名为全小写下划线格式的sales_units,Pandas对列名是大小写、格式完全敏感的,拼写不匹配会直接触发列不存在的报错,不过这不是你看到长串乱码的核心原因。
  • 核心问题:sales_units列的实际数据类型为object(字符串类型),并非你预期的整型。当对字符串类型的列执行sum()聚合时,Pandas不会做数值加法运算,而是会将同组下的所有字符串直接首尾拼接,最终就生成了你看到的、由数字字符组成的无意义长串。
修复步骤
  1. 先执行以下代码确认列名和字段类型,验证上述判断:
    # 打印所有列名
    print(df.columns.tolist())
    # 打印每列的数据类型
    print(df.dtypes)
    
    输出中你会看到sales_units对应的dtype为object,而非数值类型的int64/float64。
  2. 将sales_units列转换为数值类型,同时自动标记列中的非数字脏数据为缺失值:
    df['sales_units'] = pd.to_numeric(df['sales_units'], errors='coerce')
    
    转换完成后可以执行print(df[df['sales_units'].isna()])查看存在脏数据的行,把混入的空格、特殊字符等异常值清理干净即可。
  3. 修正列名拼写,重新执行聚合逻辑,两种方法都可以得到正确结果:
    • groupby 写法:
      result = df.groupby('weight_conversion', as_index=False)['sales_units'].sum()
      
    • pivot_table 写法:
      result = df.pivot_table(
          index='weight_conversion',
          values='sales_units',
          aggfunc='sum',
          as_index=False
      )
      
注意事项

如果你的weight_conversion列是通过计算生成的浮点数,可能存在浮点精度问题(比如本该是0.1的值实际存储为0.1000000000001、0.0999999999999),导致本该分到同一组的数据被拆分。这种情况可以先根据业务需要的精度对该列做四舍五入后再分组,例如保留1位小数:

df['weight_conversion'] = df['weight_conversion'].round(1)

如果需要最终结果的sales_units为整型,确认列中无缺失值后执行类型转换即可:

result['sales_units'] = result['sales_units'].astype(int)

运行后得到的结果和你的预期完全一致:

weight_conversion  sales_units
0                0.1            3
1               50.0          300
2               96.1           20
3              314.4            2
4              500.0          300

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:01:06