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

Pandas Python如何实现多列explode自动拆分逗号分隔值生成行组合

问题描述

我的Excel输入数据如下:
输入示例

预期输出效果:将各列中逗号分隔的所有值生成全量可能组合,拆分为独立的行。
输出示例

当前实现代码:

df = pd.DataFrame()
for file in files:
   if file.endswith('.xlsx'):
       df = df.append(pd.read_excel('downloads/' + file), ignore_index=True) 
df.head() 
df.to_excel(r'downloads/merged.xlsx')

df.type_c = df.type_c.str.split(',')
df1 = df.explode('type_c') 

df1.language_c = df1.language_c.str.split(',')
df1.explode('language_c')

目前是逐列手动执行explode操作,想确认是否可以不用手动指定列名,自动完成所有含逗号分隔值列的explode处理,还是必须循环遍历列实现。

解决方案

不用手动逐列硬编码,也不用写复杂逻辑。pandas 1.3.0及以上版本的explode原生支持传入列名列表,只要先自动识别出所有带逗号分隔值的列,统一拆分后一次性explode即可,自动生成所有值的全量组合。

完整实现代码:

import pandas as pd
import os

# 合并目录下所有xlsx文件(新版pandas已移除append方法,用concat兼容性更好)
file_list = [f for f in os.listdir('downloads') if f.endswith('.xlsx')]
df = pd.concat(
    [pd.read_excel(os.path.join('downloads', file)) for file in file_list],
    ignore_index=True
)

# 自动识别所有包含逗号分隔值的列
# 先筛选所有文本类型列,再判断列内是否存在带逗号的值
split_cols = [
    col for col in df.select_dtypes(include='object').columns
    if df[col].str.contains(',', na=False).any()
]

# 对识别到的列统一按逗号拆分为列表
df[split_cols] = df[split_cols].apply(lambda col: col.str.split(','))

# 一次性explode所有拆分后的列,自动生成全量组合
df_final = df.explode(split_cols, ignore_index=True)

# 导出结果
df_final.to_excel(r'downloads/merged_result.xlsx', index=False)

如果使用的pandas版本低于1.3.0,不支持多列同时explode,逐列循环explode即可,效果完全一致:

# 低版本pandas兼容写法
for col in split_cols:
    df = df.explode(col, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:06:25