如何简便拆分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
相关产品推荐
相关产品推荐

