Python DataFrame拆分含逗号列至多行并保留其他数据
高效拆分含逗号的DataFrame行(低内存版)
刚好处理过类似的大文件需求,给你推荐个高效又省内存的方案——用pandas的str.split()结合explode(),完全不用手动复制行再区分副本,而且底层是矢量化操作,速度和内存表现都碾压手动循环的方法!
核心思路
把含逗号的列先拆成列表(没有逗号的行会自动变成单元素列表),然后用explode()把列表里的每个元素展开成单独的行,其他列会自动保留对应的值,全程由pandas优化处理,不需要手动管理行的副本。
代码示例
1. 基础处理(小/中等文件)
假设你的DataFrame名为df,需要拆分的列是col2和col3:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'col1': [1, 2, 3], 'col2': ['a,b', 'c', 'd,e'], 'col3': ['x', 'y,z', 'w,v'] }) # 拆分col2并展开行 df = df.assign(col2=df['col2'].str.split(',')).explode('col2', ignore_index=True) # 拆分col3并展开行 df = df.assign(col3=df['col3'].str.split(',')).explode('col3', ignore_index=True) print(df)
输出结果:
col1 col2 col3 0 1 a x 1 1 b x 2 2 c y 3 2 c z 4 3 d w 5 3 d v 6 3 e w 7 3 e v
2. 大文件分块处理(极低内存消耗)
如果你的文件特别大,无法一次性加载到内存,可以用分块读取的方式,逐块处理后再合并结果:
import pandas as pd chunk_size = 10000 # 根据你的内存情况调整,比如1万行一块 processed_chunks = [] # 逐块读取文件并处理 for chunk in pd.read_csv('your_large_file.csv', chunksize=chunk_size): # 对当前块执行拆分操作 chunk = chunk.assign(col2=chunk['col2'].str.split(',')).explode('col2', ignore_index=True) chunk = chunk.assign(col3=chunk['col3'].str.split(',')).explode('col3', ignore_index=True) processed_chunks.append(chunk) # 合并所有处理后的块 final_df = pd.concat(processed_chunks, ignore_index=True) # 保存结果 final_df.to_csv('split_result.csv', index=False)
额外优化技巧
- 如果逗号前后有空格,用
str.split(',\s*')替代str.split(','),自动去掉拆分后的空格 - 读取文件时给字符串列指定
dtype='string',比默认的object类型更节省内存 - 避免使用
inplace=True,链式操作的可读性和稳定性更好
内容的提问来源于stack exchange,提问作者SGeuer
相关产品推荐
相关产品推荐

