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

如何在Pandas中按分隔符拆分DataFrame索引并转为列?

索引拆分赋值报错的解决方法

原始数据构造

import pandas as pd
df = pd.DataFrame({'x':[1,2,3,4]})
df.index = ['A:100','B:103','C:105','D:108']

需求

将索引按冒号:拆分为y和z两列,最终得到如下结构:

x   y   z
1   A   100
2   B   103
3   C   105
4   D   108

报错情况

执行代码df[['y','z']] = df.index.str.split(':', expand=True)时,抛出错误:

ValueError: Columns must be same length as key

解决方法

方法一:先转索引为列再拆分

这是最直观的处理方式,先把索引转为普通列,拆分后再整理结构:

# 将索引转为列,命名为临时列
df = df.reset_index().rename(columns={'index': 'temp_col'})
# 拆分临时列为y和z
df[['y', 'z']] = df['temp_col'].str.split(':', expand=True)
# 删除临时列,调整列顺序
df = df.drop('temp_col', axis=1)[['x', 'y', 'z']]

方法二:拆分索引后合并DataFrame

直接拆分索引得到新的DataFrame,再与原数据合并:

# 拆分索引并命名列
split_result = df.index.str.split(':', expand=True).rename(columns={0: 'y', 1: 'z'})
# 合并原数据和拆分结果
df = pd.concat([df, split_result], axis=1)
# 可选:重置为默认数值索引
df = df.reset_index(drop=True)

方法三:简洁赋值方式

利用assign方法直接将拆分结果转为列:

df = df.assign(**dict(zip(['y', 'z'], df.index.str.split(':').tolist()))).reset_index(drop=True)

报错原因

直接赋值时,Pandas对新列的创建与右侧DataFrame的索引对齐逻辑存在冲突——原数据中不存在y、z列,直接赋值会触发列长度匹配校验,而通过拆分索引生成的DataFrame在赋值时未被正确识别为匹配结构,导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:07:15