Pandas pivot_table处理字符串列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
相关产品推荐
相关产品推荐

