如何用Pandas拆分逗号分隔单元格并追加新行,同步复制非分隔列?
Pandas自动化清理含逗号分隔符的源数据
需求描述
需要自动化清理含逗号分隔符的源数据:部分列单元格内容以逗号分隔,部分列无分隔符。需拆分带分隔符的单元格并追加为新行,同时复制非分隔列的值到对应新行,无法更改原始数据录入方式。
源数据
| Name | Purchase Year | SKU | Quantity | Description | Territory | Order Reference | Contact Name | Contact Email | Contact Phone | Notes |
|---|---|---|---|---|---|---|---|---|---|---|
| John Smith,John Smith | 7,7 | ABCEF,HIJKL | 1,1 | Territory1,Territory2 | O-1394 | John Smith | Name@email.com | 8008383838 | Note123 |
预期输出
| Name | Purchase Year | SKU | Quantity | Description | Territory | Order Reference | Contact Name | Contact Email | Contact Phone | Notes |
|---|---|---|---|---|---|---|---|---|---|---|
| John Smith | 7 | ABCEF | 1 | Territory1 | O-1394 | John Smith | Name@email.com | 8008383838 | Note123 | |
| John Smith | 7 | HIJKL | 1 | Territory2 | O-1394 | John Smith | Name@email.com | 8008383838 | Note123 |
已在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
相关产品推荐
相关产品推荐

