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

使用Python pandas基于正则匹配列名拆分CSV文件的方法

实现方案

直接按匹配到的Total - 列的位置做切分即可,不需要额外手动处理,逻辑如下:

  • 先读入完整DataFrame,拿到全量列名,遍历找出所有符合Total - 匹配规则的列的索引位置
  • 固定保留第一列(即示例里的X列,作为所有子表共有的维度列)
  • 按定位到的Total列索引逐段切分列:每段从当前Total列开始,到下一个Total列的前一列截止,最后一段直接取到所有列的末尾
  • 每段列和公共列组合后提取子DataFrame,直接导出为独立CSV即可

完整可运行代码如下:

import pandas as pd
import re

def pivotChunk(path: str):
    # 读取原始CSV文件
    raw_df = pd.read_csv(
        path,
        encoding='unicode_escape',
        engine='python'
    )
    all_columns = raw_df.columns.tolist()
    # 定位所有带'Total - '前缀的列的索引
    split_point_indices = [
        idx for idx, col_name in enumerate(all_columns)
        if re.search(r'Total - ', col_name)
    ]
    # 配置所有子表都要保留的公共列,这里默认第一列为X列,需要多列公共字段直接往列表里加列名即可
    common_columns = [all_columns[0]]

    # 逐段生成子表并导出
    for seq, start_pos in enumerate(split_point_indices):
        # 计算当前段的结束位置:非最后一段就截止到下一个拆分点的位置,最后一段取到列尾
        end_pos = split_point_indices[seq + 1] if seq < len(split_point_indices) - 1 else len(all_columns)
        current_sub_cols = common_columns + all_columns[start_pos:end_pos]
        sub_df = raw_df[current_sub_cols]
        # 生成导出文件名,替换掉特殊字符避免文件系统报错
        file_tag = all_columns[start_pos].replace('Total - ', '').replace('/', '_').replace('\\', '_')
        sub_df.to_csv(f"split_{file_tag}.csv", index=False, encoding='utf-8-sig')
        print(f"生成拆分文件:split_{file_tag}.csv,包含列:{current_sub_cols}")

if __name__ == '__main__':
    pivotChunk('2.1.csv')

补充说明:

  • 代码会自动识别拆分点数量,不管CSV里有多少个带Total - 的列都能自动拆分,不需要手动改配置
  • 导出用utf-8-sig编码是为了避免Excel打开中文乱码,如果是纯英文数据或者用其他工具打开,可以换成你需要的编码
  • 按给出的示例结构运行后,会正好生成2个拆分文件,列和预期效果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:21:37