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

处理Pandas MultiIndex列时触发TypeError,求生成指定输出的方案

解决Pandas行列转换时的列名拼接报错问题

嘿,我来帮你搞定这个问题~

为啥会报错?

你遇到的TypeError: sequence item 1: expected str instance, int found错误,是因为原DataFrame的索引是整数类型(1、2、3),而str.join()方法要求拼接的所有元素都是字符串,整数和字符串没法直接凑到一块儿,所以触发了类型错误。

修正后的解决方案

只需要在拼接列名的时候,把整数索引转换成字符串就行,修改后的代码如下:

import pandas as pd

# 先构建你的示例数据
df = pd.DataFrame(
    data=[['Apple', 'Orange', 'Grape'], ['Car', 'Truck', 'Plane'], ['House', 'Apartment', 'Garage']],
    index=[1, 2, 3],
    columns=['A', 'B', 'C']
)

# 执行unstack和转置操作
v = df.unstack().to_frame().sort_index(level=1).T
# 把元组里的整数索引转成字符串再拼接
v.columns = v.columns.map(lambda x: f"{x[0]}_{str(x[1])}")

print(v)

运行结果

执行后就能得到你想要的输出格式:

A_1    A_2     A_3    B_1     B_2       B_3    C_1    C_2     C_3
0  Apple  Car  House  Orange  Truck  Apartment  Grape  Plane  Garage

另一种更简洁的写法

如果你想换个思路,也可以用stack+unstack的组合来实现,代码更直观,还不用单独处理类型转换:

result = (df.stack()
          .unstack(0)
          .rename_axis(columns=['col', 'idx'])
          .reset_index(drop=True))
result.columns = result.columns.map('_'.join)

这个方法同样能生成符合要求的DataFrame,逻辑也更清晰~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:57