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

基于分隔符拆分Pandas多列中的行

解决方案:Pandas 多列不等长拆分并匹配行

可以通过结合 itertools.zip_longest 和 pandas 的 apply 方法实现需求,该方法能自动处理列间拆分长度不一致的情况,不足的位置自动补空值。

步骤实现

  1. 导入依赖库
import pandas as pd
from itertools import zip_longest
  1. 构造示例DataFrame
df = pd.DataFrame({
    'Column A': ['Apple', 'Banana', 'Watermelon'],
    'Column B': ['red, yellow, blue', 'yellow, orange', 'grey'],
    'Column C': ['Texas, California', 'Indiana, New Zealand', '']
})
  1. 定义拆分匹配函数
    对每行的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]
    })
  1. 应用函数并合并结果
    用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:12:45