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
相关产品推荐
相关产品推荐

