Pandas DataFrame字符串拆分求助:将特定格式列转为目标列表
解决DataFrame位置列格式转换问题
我来帮你搞定这个格式转换的问题!你的原始代码嵌套了太多循环,逻辑也绕了弯路,我们可以用更简洁的Pandas自定义函数来实现需求,逻辑清晰还容易维护。
转换规则拆解
先把需求里的转换逻辑明确下来:
- 逗号分隔的每个部分独立处理
- 若部分包含
(...),拆分位置组和角色组:- 位置组有斜杠
/时,拆分每个单独位置 - 角色组去掉括号后,若有多个字符(比如
RC),拆分每个单独角色 - 每个位置和每个角色两两组合,用空格分隔
- 位置组有斜杠
- 若部分没有括号,直接保留原内容
实现代码
先定义处理单个字符串的函数,然后用apply批量处理列:
import pandas as pd def process_position(s): result = [] # 按逗号拆分每个子部分 parts = s.split(', ') for part in parts: if '(' in part: # 拆分位置和角色部分 positions_str, roles_str = part.split('(', 1) roles_str = roles_str.replace(')', '') # 拆分位置(处理斜杠) positions = positions_str.split('/') # 拆分角色(处理多字符) roles = list(roles_str) # 两两组合 for pos in positions: for role in roles: result.append(f"{pos} {role}") else: # 没有括号的部分直接添加 result.append(part) # 转成目标格式的字符串 return f"[{', '.join(result)}]" # 测试用DataFrame data = { 'position': [ 'D/WB/M (L)', 'DM, M/AM (C)', 'D (RC), WB (R)', 'D (C), DM, M (C)', 'M (C), AM (LC), ST (C)' ] } df = pd.DataFrame(data) # 应用函数生成新列 df['processed_position'] = df['position'].apply(process_position) print(df['processed_position'])
输出结果
运行后会得到你期望的格式:
0 [D L, WB L, M L] 1 [DM, M C, AM C] 2 [D R, D C, WB R] 3 [D C, DM, M C] 4 [M C, AM L, AM C, ST C] Name: processed_position, dtype: object
代码解释
process_position函数:负责处理单个位置字符串,核心逻辑是拆分每个子部分,处理位置和角色的组合- 拆分与组合:对带括号的部分,先拆分位置和角色,再分别处理斜杠和多字符角色,最后做笛卡尔积组合
- 批量处理:用Pandas的
apply方法,把函数应用到整个列,避免了繁琐的嵌套循环
这样的代码比你原来的版本简洁很多,逻辑也更清晰,容易调试和修改~
内容的提问来源于stack exchange,提问作者CMig
相关产品推荐
相关产品推荐

