使用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
相关产品推荐
相关产品推荐

