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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:35:47