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

