Python中有没有快速实现csv单元格按换行拆分合并、按列分组的方法
单元格换行拆分与合并高效实现方案
你现有实现用了逐行循环的写法,数据量大时性能较低,可直接用pandas内置的向量化方法实现,同时支持双向操作:
正向拆分(带换行的单元格拆分为多行)
利用str.splitlines将单元格内容转为列表,再用explode方法将列表拆分为独立行,Column3会自动按对应行数重复,无需手动处理:
import pandas as pd # 读取原始CSV df = pd.read_csv('Test1.csv') # 新增分组ID,避免反向合并时因Column3重复出现合并错误,若Column3全局唯一可省略该行 df['group_id'] = df.index # 将需要拆分的列按换行符转为列表 df[['Column1', 'Column2']] = df[['Column1', 'Column2']].apply(lambda col: col.str.splitlines()) # 同时炸开两列,生成目标格式 df_split = df.explode(['Column1', 'Column2'], ignore_index=True) # 导出拆分结果 df_split.to_csv('Test1_split.csv', index=False)
反向合并(多行合并为带换行的单元格)
按分组ID(或Column3)分组后,用\n拼接Column1和Column2的内容即可还原原始格式:
# 读取拆分后的CSV df_split = pd.read_csv('Test1_split.csv') # 按分组聚合,还原带换行的单元格 df_merged = df_split.groupby('group_id', as_index=False).agg( Column1 = ('Column1', '\n'.join), Column2 = ('Column2', '\n'.join), Column3 = ('Column3', 'first') ) # 可选:删除新增的group_id列 df_merged = df_merged.drop('group_id', axis=1) # 导出合并结果 df_merged.to_csv('Test1_merged.csv', index=False)
注意事项
- 上述实现默认你提到的「Column1和Column2单元格换行数量始终一致」的前提,无需额外做长度校验
- 若使用低于1.3.0版本的pandas,不支持同时explode多列,可分开两次调用explode方法:先炸Column1再炸Column2,效果完全一致
- 若确认Column3值全局唯一,可省略group_id字段,直接按
Column3分组即可
内容的提问来源于stack exchange,提问作者Blckster
相关产品推荐
相关产品推荐

