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

如何拆分Pandas列逗号分隔内容并保留括号内文本生成新列

Pandas 括号内容保留的字符串拆分方案

核心逻辑是通过正则匹配不在括号内部的逗号作为分隔符,不会破坏括号内和菜品绑定的备注内容,兼容带括号和不带括号的所有菜品格式。

实现代码

import pandas as pd
import re

# 构造示例数据,你可以直接替换成自己的PD_FOODS变量
data = {
    "USER_ID": [100, 101, 102, 103, 104],
    "FOODS_I_LIKE": [
        "Pizza(without garlic, tomatos and onion),pasta",
        "Seafood,veggies",
        "Indian food (no pepper, no curry),mexican food(no pepper)",
        "Texmex, african food, japanese food,italian food",
        "Seafood(no shrimps, no lobster),italian food(no gluten, no milk)"
    ]
}
PD_FOODS = pd.DataFrame(data)

# 拆分核心逻辑:正则匹配非括号内的逗号
# 正则`,(?![^(]*\))`说明:匹配逗号,且该逗号后方不存在「无左括号的右括号」,即不在括号内部
split_cols = PD_FOODS['FOODS_I_LIKE'].str.split(r',(?![^(]*\))', expand=True)
# 重命名拆分后的列
split_cols.columns = [f"FOODS_I_LIKE_{i+1}" for i in split_cols.columns]
# 去除每个菜品名称前后的多余空格
split_cols = split_cols.apply(lambda x: x.str.strip())

# 合并USER_ID和拆分后的列
PD_FOODS = pd.concat([PD_FOODS[['USER_ID']], split_cols], axis=1)

输出结果

运行后输出的PD_FOODS格式如下:

USER_ID                      FOODS_I_LIKE_1                  FOODS_I_LIKE_2  FOODS_I_LIKE_3 FOODS_I_LIKE_4
0      100  Pizza(without garlic, tomatos and onion)                           pasta            None           None
1      101                                  Seafood                         veggies            None           None
2      102         Indian food (no pepper, no curry)        mexican food(no pepper)            None           None
3      103                                   Texmex                  african food  japanese food  italian food
4      104          Seafood(no shrimps, no lobster)  italian food(no gluten, no milk)            None           None

如果只需要保留前2列,可在合并后自行删除多余的空列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:36:04