You need to enable JavaScript to run this app. Python Pandas中带{}、|分隔的DataFrame列explode拆行方法
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas中带{}、|分隔的DataFrame列explode拆行方法

带{}包裹、|分隔字段的DataFrame拆分多行实现

之前测试代码达不到预期的核心原因:单独处理列时,没有先剥离单元格内容里的{}包裹符,也没有兼容非格式类的普通单元格,直接对字符串做逐字符遍历切分,无法生成explode方法要求的列表结构,自然达不到预期效果。

核心处理思路

  • 逐列定位所有带特殊格式的单元格:即同时被{}包裹、内部用|分隔多值的单元格,对这类单元格做两步清洗:去掉首尾的花括号、按|切分成元素列表
  • 统一单元格格式:对没有特殊格式的普通单元格,直接把原有值包装为单元素列表,保证和拆分后的单元格格式统一,不会触发格式报错
  • 批量同步拆分:一次性对所有待拆分列调用pandas原生explode方法,保证同一行的多列拆分值精准对齐,避免列错位
  • 规整输出结构:拆分完成后重置索引,得到和预期完全一致的表格结构

可直接运行的完整代码

构建匹配描述的原始测试表

import pandas as pd

df = pd.DataFrame({
    "Name": [1, 2, 3],
    "gender": ["M", "F", "M"],
    "message_type": ["orange", "", "{red|blue}"],
    "code": ["103", "{102|777}", "983"]
})

执行拆分逻辑

# 定义所有可能出现特殊分隔格式的列
target_split_cols = ["message_type", "code"]

# 逐列做格式适配,将单元格内容转换为explode可识别的列表结构
for col in target_split_cols:
    df[col] = df[col].apply(
        lambda cell: (
            cell.strip("{}").split("|")
            if isinstance(cell, str) and cell.startswith("{") and cell.endswith("}")
            else [cell]
        )
    )

# 批量执行explode拆分
df_final = df.explode(target_split_cols).reset_index(drop=True)

最终输出结果

执行完成后得到的表格和预期效果完全一致:

Name gender message_type code
0     1      M        orange  103
1     2      F               102
2     2      F               777
3     3      M           red  983
4     3      M          blue  983

常见踩坑提醒

  • 不要只对单独一列做拆分:原始表中message_type和code列都可能出现{}包裹的多值格式,如果只处理其中一列,会出现拆分后另外一列没有同步匹配行的错位问题
  • 切分逻辑要针对单元格整体:你之前写的lambda逻辑是把字符串拆成单个字符再做切分,而不是对单元格整体内容做剥离、切分操作,自然生成不了正确的列表结构
  • 拆分逻辑要加类型判断:如果列内存在非字符串类型的值(比如数字类型的code值),直接调用字符串方法会触发类型报错,加类型判断能兼容混合类型的列内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 09:45:00