如何拆分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
相关产品推荐
相关产品推荐

