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

如何用Pandas拆分逗号分隔单元格并追加新行,同步复制非分隔列?

Pandas自动化清理含逗号分隔符的源数据

需求描述

需要自动化清理含逗号分隔符的源数据:部分列单元格内容以逗号分隔,部分列无分隔符。需拆分带分隔符的单元格并追加为新行,同时复制非分隔列的值到对应新行,无法更改原始数据录入方式。

源数据

NamePurchase YearSKUQuantityDescriptionTerritoryOrder ReferenceContact NameContact EmailContact PhoneNotes
John Smith,John Smith7,7ABCEF,HIJKL1,1Territory1,Territory2O-1394John SmithName@email.com8008383838Note123

预期输出

NamePurchase YearSKUQuantityDescriptionTerritoryOrder ReferenceContact NameContact EmailContact PhoneNotes
John Smith7ABCEF1Territory1O-1394John SmithName@email.com8008383838Note123
John Smith7HIJKL1Territory2O-1394John SmithName@email.com8008383838Note123

已在Excel Power Query中实现该功能,希望用Pandas实现以简化自动化流程,了解explode函数但不确定是否能满足需求,寻求实现思路。


解决方案

可以通过拆分列生成列表 + 批量explode的方式实现,步骤如下:

1. 拆分需要处理的列

先将所有带逗号分隔的列,用str.split(',')拆分成列表格式,非分隔列保持原样。

2. 批量展开拆分后的列

使用df.explode()同时对多个拆分后的列进行展开,Pandas会自动复制非拆分列的值到对应新行。

代码示例

import pandas as pd

# 构造源数据(实际场景可替换为pd.read_excel/csv读取数据)
data = {
    'Name': ['John Smith,John Smith'],
    'Purchase Year': ['7,7'],
    'SKU': ['ABCEF,HIJKL'],
    'Quantity': ['1,1'],
    'Description': ['Territory1,Territory2'],
    'Territory': ['O-1394'],
    'Order Reference': ['John Smith'],
    'Contact Name': ['Name@email.com'],
    'Contact Email': ['8008383838'],
    'Contact Phone': ['Note123'],
    'Notes': ['']
}
df = pd.DataFrame(data)

# 定义需要拆分的列(根据实际情况调整)
split_cols = ['Name', 'Purchase Year', 'SKU', 'Quantity', 'Description']

# 拆分列生成列表
df[split_cols] = df[split_cols].apply(lambda x: x.str.split(','))

# 批量展开拆分后的列
result_df = df.explode(split_cols, ignore_index=True)

# 输出结果
print(result_df)

关键说明

  • 确保所有拆分列的列表长度一致,否则explode会报错(源数据中每个逗号分隔的单元格拆分后元素数量需相同,如示例中都是2个)。
  • ignore_index=True用于重置结果的索引,避免重复索引问题。
  • 非拆分列的值会被自动复制到每一行,完全符合需求。

内容的提问来源于stack exchange,提问作者Glyph1017

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:54:24