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

如何将逗号分隔值拆分为多行?数据清洗问题求助

数据清洗问题:将含逗号分隔值的列拆分为多行

输入图片描述

我在数据清洗时遇到问题:如何将含逗号分隔值的列拆分为多行?我尝试了以下代码:

xd = df.assign(var1=df['var1'].str.split(',')).explode('var1')
xd = xd.assign(var2=xd['var2'].str.split(',')).explode('var2')
xd

但该代码生成了大量无关行,恳请提供可行解决方案。


解决方案

你的代码产生大量无关行的核心原因是:分步对var1和var2执行explode会触发笛卡尔积——每一个var1的拆分值都会和所有var2的拆分值配对,这显然不符合“对应值匹配拆分”的需求。

以下是两种精准拆分的可行方法:

方法1:基于对应关系的批量展开(适用于多列拆分)

假设每行中var1和var2的逗号分隔值数量完全对应(比如var1有3个值,var2也有3个值),可以用这种方式:

# 先将两列拆分为列表
df['var1'] = df['var1'].str.split(',')
df['var2'] = df['var2'].str.split(',')

# 按行将对应位置的值配对展开
result = df.apply(
    lambda row: pd.DataFrame({'var1': row['var1'], 'var2': row['var2']}),
    axis=1
).reset_index().explode(0).drop(columns='index').rename(columns={0: 'temp'}).join(df['temp'].apply(pd.Series))

方法2:打包元组后一次性展开(更简洁)

先把两列的拆分值打包成一一对应的元组列表,再展开拆分:

# 拆分列并打包成对应元组
df['pair'] = df.apply(lambda x: list(zip(x['var1'].split(','), x['var2'].split(','))), axis=1)

# 展开元组列,拆分回原字段
result = df.explode('pair').assign(
    var1=lambda x: x['pair'].str[0],
    var2=lambda x: x['pair'].str[1]
).drop(columns='pair')

关键注意点

  • 必须保证每行中待拆分列的逗号分隔值数量完全一致,否则会出现值错位;
  • 其他需要保留的列(如主键、分类列)会自动和拆分后的行对应,不会额外生成冗余数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:05:36