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
相关产品推荐
相关产品推荐

