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

如何修复Pandas列名拆分转MultiIndex时的AttributeError错误?

解决DataFrame列名拆分MultiIndex时的AttributeError问题

问题场景

给定如下DataFrame:

import pandas as pd

df = pd.DataFrame({
    "One_X": [1.1, 1.1, 1.1],
    "One_Y": [1.2, 1.2, 1.2],
    "Two_X": [1.11, 1.11, 1.11],
    "Two_Y": [1.22, 1.22, 1.22]
})

需求:将列名拆分为二级MultiIndex,要求:

  • 第0级:"One"、"Two"
  • 第1级:"X"、"Y"

尝试使用以下代码时触发错误:

df.columns = pd.MultiIndex.from_tuples([tuple(c.split("_")) for c in df.columns])

报错信息:

AttributeError: 'tuple' object has no attribute 'split'

问题原因

报错说明当前df.columns中的元素不是字符串类型,而是元组——元组没有split()方法,因此无法执行字符串拆分操作。这种情况通常是因为之前的操作已经将列名改成了元组类型。

解决方法

方法1:先将列名转回字符串再拆分

如果列名已经是元组类型,先转为字符串后再执行拆分逻辑:

# 将列名强制转为字符串
df.columns = df.columns.astype(str)
# 拆分生成MultiIndex
df.columns = pd.MultiIndex.from_tuples([tuple(c.split("_")) for c in df.columns])

方法2:更简洁的原生Pandas写法(推荐)

直接利用Pandas的字符串split()方法,结合expand=True参数一步生成MultiIndex:

df.columns = df.columns.str.split("_", expand=True)

该写法会自动将拆分后的两部分分别作为MultiIndex的两级,无需手动转元组,代码更简洁高效。

验证结果

执行后查看列名:

print(df.columns)

输出符合预期:

MultiIndex([('One', 'X'),
            ('One', 'Y'),
            ('Two', 'X'),
            ('Two', 'Y')],
           )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:33:16