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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:22:11