基于Reg_ID列特定字符拆分大型CSV文件的技术问询
按Reg_ID前缀拆分大型CSV文件
方法一:用Pandas快速实现
处理5.5万行这种量级的文件毫无压力,代码简洁易读:
import pandas as pd # 读取原CSV,根据实际情况调整编码、分隔符 df = pd.read_csv('your_input_file.csv', encoding='utf-8') # 从Reg_ID里提取下划线前的研究单元标识 df['Study_Unit'] = df['Reg_ID'].str.split('_').str[0] # 按单元分组,每个组写入单独的CSV for unit, group in df.groupby('Study_Unit'): # 处理文件名里的非法字符,避免保存失败 safe_unit = unit.replace('/', '_').replace('\\', '_') group.to_csv(f'{safe_unit}_data.csv', index=False, encoding='utf-8')
关键细节
str.split('_').str[0]:精准截取Reg_ID中下划线前的部分,不管前缀长度多少都能适配- 生成的文件命名格式为
[研究单元标识]_data.csv,方便识别 - 如果你的CSV用分号分隔,给
pd.read_csv加个参数sep=';'就行
方法二:用Python标准库CSV模块(无额外依赖)
不想装Pandas的话,用原生模块也能搞定,适合低依赖场景:
import csv from collections import defaultdict # 用字典存每个研究单元的所有行数据 unit_rows = defaultdict(list) # 读取原文件 with open('your_input_file.csv', 'r', encoding='utf-8') as infile: reader = csv.DictReader(infile) header = reader.fieldnames # 保存表头 for row in reader: reg_id = row['Reg_ID'] # 处理Reg_ID里没有下划线的极端情况 study_unit = reg_id.split('_')[0] if '_' in reg_id else reg_id unit_rows[study_unit].append(row) # 把每个单元的数据写入新文件 for unit, rows in unit_rows.items(): safe_unit = unit.replace('/', '_').replace('\\', '_') with open(f'{safe_unit}_data.csv', 'w', newline='', encoding='utf-8') as outfile: writer = csv.DictWriter(outfile, fieldnames=header) writer.writeheader() writer.writerows(rows)
关键细节
defaultdict(list):自动为每个新的研究单元创建列表,不用手动判断newline='':避免Windows系统下写入CSV时出现多余空行- 编码有问题的话,试试把
utf-8换成gbk或者utf-8-sig
通用注意事项
- 记得把代码里的
your_input_file.csv换成你实际的文件名 - 若研究单元标识里有其他特殊字符(比如冒号、问号),可以在
safe_unit里继续添加替换规则
内容的提问来源于stack exchange,提问作者Adam Johns
相关产品推荐
相关产品推荐

