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

Pandas pivot_table处理字符串列DataFrame行转列报错求解

问题背景
  • 现有如下结构的DataFrame:
    原始DataFrame结构
  • 目标:通过行转列操作,得到如下预期输出:
    预期输出结果
  • 尝试调用Pandas的pivot_table函数,将Custom Field列的行值转换为新列名时出现报错,测试代码如下:
import pandas as pd

data = {
"Custom Field": ["CF1", "CF2", "CF3"],
"id": ["RSA", "RSB", "RSC"],
"Name": ["Wilson", "Junior", "Otavio"]
}

### 构造DataFrame ###
df = pd.DataFrame(data)
print(df)

df2 = df.pivot_table(columns=['Custom Field'], index=['Name'])
print(df2)
  • 报错信息截图:
    运行报错截图
  • 初步猜测报错和操作字段为String类型有关,需要可行的解决方案。
报错原因

pivot_table默认的聚合函数是mean(求平均值),仅支持对数值类型数据做计算,当前要展开的id列是字符串类型,无法执行均值聚合,因此触发报错,和字符串类型作为列名、索引没有关系。

解决方法

该场景属于无重复匹配键的简单行转列,不需要聚合计算,直接用pivot方法即可,不需要使用pivot_table:

# 指定行索引、展开列、填充值对应的列
df2 = df.pivot(index='Name', columns='Custom Field', values='id')
# 重置索引,把Name从行索引转为普通列,和预期输出格式对齐
df2 = df2.reset_index()
print(df2)

运行后输出:

Custom Field    Name  CF1  CF2  CF3
0             Junior  NaN  RSB  NaN
1            Otavio  NaN  NaN  RSC
2             Wilson  RSA  NaN  NaN

如果需要用pivot_table实现,手动指定支持字符串类型的聚合函数即可,比如first取每组第一个匹配值:

df2 = df.pivot_table(
    columns='Custom Field',
    index='Name',
    values='id',
    aggfunc='first'
).reset_index()

如果需要把结果中的空值替换为空字符串或者其他默认值,在代码末尾追加.fillna('')即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:15:37