基于分隔符拆分Pandas多列中的行
解决方案:Pandas 多列不等长拆分并匹配行
可以通过结合 itertools.zip_longest 和 pandas 的 apply 方法实现需求,该方法能自动处理列间拆分长度不一致的情况,不足的位置自动补空值。
步骤实现
- 导入依赖库
import pandas as pd from itertools import zip_longest
- 构造示例DataFrame
df = pd.DataFrame({ 'Column A': ['Apple', 'Banana', 'Watermelon'], 'Column B': ['red, yellow, blue', 'yellow, orange', 'grey'], 'Column C': ['Texas, California', 'Indiana, New Zealand', ''] })
- 定义拆分匹配函数
对每行的Column B和Column C按分隔符拆分,用zip_longest将两个拆分后的列表按位置配对,长度不足的位置填充空字符串,最后返回包含多行的小DataFrame:
def split_and_match(row): # 拆分列B,处理空值情况 b_vals = [x.strip() for x in row['Column B'].split(',')] if row['Column B'] else [] # 拆分列C,处理空值情况 c_vals = [x.strip() for x in row['Column C'].split(',')] if row['Column C'] else [] # 按位置配对,长度不足的补空字符串 paired = list(zip_longest(b_vals, c_vals, fillvalue='')) # 构造新的DataFrame,Column A保持原值重复 return pd.DataFrame({ 'Column A': [row['Column A']]*len(paired), 'Column B': [x[0] for x in paired], 'Column C': [x[1] for x in paired] })
- 应用函数并合并结果
用apply遍历每行,将返回的小DataFrame合并成最终结果:
result_df = pd.concat(df.apply(split_and_match, axis=1).tolist(), ignore_index=True) print(result_df)
输出结果
Column A Column B Column C 0 Apple red Texas 1 Apple yellow California 2 Apple blue 3 Banana yellow Indiana 4 Banana orange New Zealand 5 Watermelon grey
关键说明
zip_longest是核心:它会以最长的列表长度为基准,将两个列表的元素按位置配对,短列表的空缺位置用fillvalue指定的空字符串填充,完美解决列间拆分长度不一致的问题。- 空值处理:提前判断列值是否为空,避免拆分空字符串得到
['']的无效结果。
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

