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

我在数据清洗时遇到问题:如何将含逗号分隔值的列拆分为多行?我尝试了以下代码:
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
相关产品推荐
相关产品推荐

