Pandas高效替换字符串:提取受伤部位替代整串文本
高效提取Pandas DataFrame中受伤部位的方法
原始数据
import pandas as pd df = pd.DataFrame({ 'name': ['John','William', 'Nancy', 'Susan', 'Robert', 'Lucy', 'Blake', 'Sally', 'Bruce'], 'injury': ['right hand broken', 'lacerated left foot', 'foot broken', 'right foot fractured', '', 'sprained finger', 'chest pain', 'swelling in arm', 'laceration to arms, hands, and foot'] })
需求说明
需要将injury列的描述文本替换为仅保留核心受伤部位(如hand、foot等),同时处理空值,优雅应对多部位同时出现的场景。
解决方案
1. 定义部位匹配规则
先明确需要提取的部位,用字典统一处理单复数映射,避免同一部位出现多种写法:
part_mapping = { r'\bhand(s)?\b': 'hand', # 匹配hand/hands r'\bfoot\b': 'foot', r'\bfinger\b': 'finger', r'\bchest\b': 'chest', r'\barm(s)?\b': 'arm' # 匹配arm/arms }
2. 编写批量提取函数
用正则匹配所有符合规则的部位,去重后格式化输出,同时处理空值:
import re def extract_injury_parts(text): # 处理空字符串 if not text.strip(): return '' # 用集合存储匹配到的部位,自动去重 matched_parts = set() for pattern, target_part in part_mapping.items(): # 忽略大小写匹配,避免漏判 if re.search(pattern, text, flags=re.IGNORECASE): matched_parts.add(target_part) # 排序后用逗号分隔,保证输出格式统一 return ', '.join(sorted(matched_parts))
3. 批量应用到DataFrame
用apply方法快速处理整列数据:
df['injury'] = df['injury'].apply(extract_injury_parts)
处理后得到的结果:
name injury 0 John hand 1 William foot 2 Nancy foot 3 Susan foot 4 Robert 5 Lucy finger 6 Blake chest 7 Sally arm 8 Bruce arm, hand, foot
多部位场景处理建议
- 单复数统一:通过正则
(s)?匹配单复数形式,映射到统一的单数部位名,避免同一部位出现多种表述 - 自动去重:用集合存储匹配结果,能自动过滤文本中重复提到的同一部位
- 灵活扩展:后续新增需要提取的部位,只需在
part_mapping字典里添加对应的正则规则和目标部位即可 - 大小写兼容:正则添加
re.IGNORECASE参数,不管文本是大写还是小写都能准确匹配
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

