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

Pandas pivot_table报'No numeric types to aggregate'错误如何解决

问题原因

No numeric types to aggregate报错来自pd.pivot_table执行步骤,触发原因有两个:

  1. 你指定的values参数对应的is_commodity列不是数值类型,可能为字符串、布尔值或者object类型,pandas透视表默认的mean聚合函数无法对非数值类型生效
  2. 你的数据中同一个['family','SF_type'] + ['SIC']的组合存在重复值,默认聚合逻辑无法处理非数值列

解决步骤

1. 转换is_commodity为数值类型

先执行以下代码确认并转换字段类型:

# 先查看当前字段类型
print(merge_3f['is_commodity'].dtype)
# 强制转换为int类型,支持布尔值、字符串格式的数字转换
merge_3f['is_commodity'] = pd.to_numeric(merge_3f['is_commodity'], errors='coerce')
# 清除转换后生成的空值
merge_3f = merge_3f.dropna(subset=['is_commodity'])

2. 修改透视表逻辑

如果你不需要对值做聚合计算,只是要生成行列对应的0/1矩阵,推荐两种适配方案:

  • 方案1:给pivot_table明确指定聚合函数
pivot_ind=pd.pivot_table(
    merge_3f,
    index=['family','SF_type'],
    values='is_commodity',
    columns=['SIC'],
    aggfunc='first' # 明确指定取每个分组的第一个值,替换默认的mean聚合
)
  • 方案2:直接用pd.crosstab生成0/1矩阵,更适配当前场景
pivot_ind = pd.crosstab(
    index=[merge_3f['family'], merge_3f['SF_type']],
    columns=merge_3f['SIC'],
    values=merge_3f['is_commodity'],
    aggfunc='first'
)

3. 热力图效果优化(可选)

如果要更贴合你预期的1值高亮效果,可以自定义配色:

# 自定义配色:0为白色,1为深绿
colormap = ['#FFFFFF', '#228B22']
# 热力图参数增加vmin、vmax保证颜色映射正确
sns.heatmap(
    pivot_ind.query('SF_type=="SMB"'), 
    annot=False, 
    linewidths=0.5, 
    cmap=colormap, 
    cbar=False, 
    ax=ax1,
    vmin=0,
    vmax=1
)
# 第二个CORP分类的热力图同理增加vmin、vmax参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:51:03