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

如何用Python Pandas将Excel父列拆分为下方两个子列

解决Pandas拆分Excel列并保持对应位置的问题

原代码的问题分析

  1. 拆分分隔符错误:使用str.split()时未指定分隔符,默认按空格拆分「12-->23」会得到['12', '-->', '23'],此时取new_cols[1]拿到的是箭头而非目标数值;
  2. 列顺序混乱:循环中把新列全部追加到DataFrame末尾,删除原列后所有子列堆在一起,无法对应到原列的位置。

方法一:生成带前缀的单层子列(保持原列顺序)

这种方法会将每个原列拆分为原列名_pre和原列名_post,并严格按照原列的顺序排列子列:

import pandas as pd

# 读取Excel文件
df = pd.read_excel('path/to/excel_file.xlsx')

# 存储新列的顺序
new_col_order = []

for col in df.columns:
    # 按-->拆分,同时处理箭头前后的空格,生成两列
    split_result = df[col].str.split(r'\s*-->\s*', expand=True)
    # 给拆分后的列命名
    split_result.columns = [f"{col}_pre", f"{col}_post"]
    # 将拆分后的列合并到原DataFrame
    df = pd.concat([df, split_result], axis=1)
    # 记录新列顺序
    new_col_order.extend([f"{col}_pre", f"{col}_post"])
    # 删除原列
    df.drop(col, axis=1, inplace=True)

# 按原列对应的子列顺序重新排列
df = df[new_col_order]

# 可选:保存结果到新Excel
df.to_excel('split_result.xlsx', index=False)

方法二:生成多层表头(完全匹配你的期望输出)

如果需要让子列「pre」「post」位于原列名正下方(即多层表头结构),可以用以下代码:

import pandas as pd

df = pd.read_excel('path/to/excel_file.xlsx')
result_df = pd.DataFrame()

for col in df.columns:
    # 拆分列并处理空格
    split_cols = df[col].str.split(r'\s*-->\s*', expand=True)
    # 设置多层表头:上层是原列名,下层是pre/post
    split_cols.columns = pd.MultiIndex.from_tuples([(col, 'pre'), (col, 'post')])
    # 合并到结果DataFrame
    result_df = pd.concat([result_df, split_cols], axis=1)

# 保存结果,多层表头会被保留
result_df.to_excel('split_result_multi_header.xlsx', index=False)

运行后,生成的Excel表头会是两层:第一层是原列名,第二层对应「pre」和「post」,完全符合你给出的期望输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:48:11