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

Pandas数据透视表创建问题:代码执行结果不符合预期

pandas数据透视表异常排查与解决

你的代码

table1 = pd.pivot_table(df1, values=['6. Senderismo', '6. serv Ciclismo','6. serv Hospedaje',
                                   '6.  serv Restaurante','7. Cabalgatas','6.  area picnic','7. Caminatas']
                       ,columns=['13. razón Recreación'], aggfunc=np.sum)
table1 

常见异常原因及解决步骤

1. 列名匹配问题

你指定的values列表里,部分列名带有多余空格(比如'6. serv Restaurante'、'6. area picnic'),如果数据源df1中的实际列名没有这些空格,pivot_table会找不到对应列,返回全NaN结果。
解决:统一列名格式,去掉前后空格:

# 先清理数据源的列名
df1.columns = df1.columns.str.strip()

2. 空值与聚合结果异常

如果values对应的列存在大量空值,np.sum聚合后会显示NaN。可以添加fill_value=0参数将空值替换为0:

table1 = pd.pivot_table(
    df1,
    values=['6. Senderismo', '6. serv Ciclismo', '6. serv Hospedaje',
            '6. serv Restaurante', '7. Cabalgatas', '6. area picnic', '7. Caminatas'],
    columns=['13. razón Recreación'],
    aggfunc=np.sum,
    fill_value=0  # 填充空值为0
)

3. 透视表结构不符合预期

默认不指定index参数时,pivot_table会将所有非values/columns的列作为行索引,导致结果出现多层行结构。如果不需要行分组,可以指定index=[]:

table1 = pd.pivot_table(
    df1,
    values=['6. Senderismo', '6. serv Ciclismo', '6. serv Hospedaje',
            '6. serv Restaurante', '7. Cabalgatas', '6. area picnic', '7. Caminatas'],
    columns=['13. razón Recreación'],
    aggfunc=np.sum,
    index=[],  # 取消行索引,仅保留列分组
    fill_value=0
)

4. 数值类型检查

确保values对应的列都是数值类型,否则np.sum无法正确聚合。可以检查列类型:

print(df1[['6. Senderismo', '6. serv Ciclismo', '6. serv Hospedaje',
           '6. serv Restaurante', '7. Cabalgatas', '6. area picnic', '7. Caminatas']].dtypes)

如果是字符串类型,需要先转换为数值:

df1[['6. Senderismo', '6. serv Ciclismo']] = df1[['6. Senderismo', '6. serv Ciclismo']].apply(pd.to_numeric, errors='coerce')

内容的提问来源于stack exchange,提问作者Francisco Minchala Fajardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:50:30