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

如何简便拆分Pandas DataFrame的列名与对应列值?

简化你的DataFrame格式转换方案

嘿,你的现有代码确实有点繁琐,这里有两种更简洁的方法来完成这个格式转换:


问题回顾

你手头有一个列名和单元格值都带空格分隔的不规范DataFrame,想要把每个空格分隔的元素拆成独立列,同时添加默认整数索引。

原不规范DataFrame:

a	b	c d	e	f g	h	i
20	21	22 1	2	3 30	31	32
17	18	19 4	5	6 27	28	29
14	15	16 7	8	9 24	25	26
11	12	13 10	11	12 21	22	23
8	9	10 13	14	15 18	19	20
5	6	7 16	17	18 15	16	17
2	3	4 19	20	21 12	13	14

期望输出:

a b c d e f g h i
0 20 21 22 1 2 3 30 31 32
1 17 18 19 4 5 6 27 28 29
2 14 15 16 7 8 9 24 25 26
3 11 12 13 10 11 12 21 22 23
4 8 9 10 13 14 15 18 19 20
5 5 6 7 16 17 18 15 16 17
6 2 3 4 19 20 21 12 13 14

方法一:利用Stack/Unstack批量处理(推荐,保留数据类型)

这种方法不用循环拼接列表,用Pandas的内置方法一次性搞定:

# 第一步:拆分所有带空格的列名,得到扁平化的新列名列表
new_columns = []
for col in df.columns:
    new_columns.extend(col.split())

# 第二步:对每行的每个单元格拆分值,再重构为标准DataFrame
clean_df = (
    df.apply(lambda x: x.str.split(expand=True).stack(), axis=1)
    .unstack()
    .rename(columns=dict(zip(range(len(new_columns)), new_columns)))
    .reset_index(drop=True)
    .astype(int)  # 可选:如果需要确保数值类型
)

方法二:字符串直接转换(最简洁,适合小数据集)

把整个DataFrame转成空格分隔的字符串,再拆分重构,代码极短:

# 把DataFrame转成空格分隔的字符串,按行拆分后再拆分每个元素
raw_data = [line.split() for line in df.to_csv(sep=' ', index=False).split('\n') if line]

# 用拆分后的第一行做列名,其余行做数据
clean_df = pd.DataFrame(raw_data[1:], columns=raw_data[0], dtype=int).reset_index(drop=True)

为什么这两种方法更好?

  • 避免了手动循环拼接列表的繁琐操作,代码更简洁易维护
  • 方法一保留了原数据的类型控制,适合大型数据集
  • 方法二代码量极少,快速解决小数据场景的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 02:57:29