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

如何用Pandas根据患者笔记填充DataFrame的Problem列null值?

用Pandas根据患者笔记填充病情列的空值

先创建示例数据方便测试(你可以替换成自己的DataFrame):

import pandas as pd
import numpy as np

data = {
    'PATIENT_ID': [1, 2, 3, 4, 5],
    'Problem': ['KNEE', None, 'ARM', None, None],
    'PATİENT NOTE': [
        'Patient complains of knee pain',
        'Arm swelling after fall',
        'Wrist injury but arm is okay',
        'Knee stiffness when walking',
        'No specific issues reported'
    ]
}
df = pd.DataFrame(data)

方法1:用.loc精准定位赋值(直观易懂)

这种方法适合规则简单的场景,先定位Problem为空且笔记包含指定关键词的行,再赋值:

# 填充KNEE:仅处理Problem为空且笔记含KNEE的行(不区分大小写)
df.loc[(df['Problem'].isna()) & (df['PATİENT NOTE'].str.contains('KNEE', case=False)), 'Problem'] = 'KNEE'

# 填充ARM:仅处理剩余的Problem为空且笔记含ARM的行
df.loc[(df['Problem'].isna()) & (df['PATİENT NOTE'].str.contains('ARM', case=False)), 'Problem'] = 'ARM'
  • 加case=False是为了匹配大小写不同的关键词(比如knee、Knee),如果需要严格区分大小写,去掉这个参数即可。
  • 如果笔记同时出现KNEE和ARM,会优先填充先执行的规则(比如上面的代码会优先填KNEE)。

方法2:用np.where链式判断(一次性处理)

适合把多个判断逻辑整合到一行代码:

df['Problem'] = np.where(
    # 条件1:Problem为空且笔记含KNEE
    df['Problem'].isna() & df['PATİENT NOTE'].str.contains('KNEE', case=False),
    'KNEE',
    # 条件2:Problem为空且笔记含ARM,否则保留原Problem值
    np.where(
        df['Problem'].isna() & df['PATİENT NOTE'].str.contains('ARM', case=False),
        'ARM',
        df['Problem']
    )
)

方法3:自定义函数+apply(适合复杂规则)

如果之后要加更多关键词(比如ANKLE、BACK),用自定义函数会更易维护:

def fill_problem(row):
    # 如果Problem已有值,直接返回
    if pd.notna(row['Problem']):
        return row['Problem']
    # 统一转大写避免大小写问题
    note_upper = row['PATİENT NOTE'].upper()
    if 'KNEE' in note_upper:
        return 'KNEE'
    elif 'ARM' in note_upper:
        return 'ARM'
    # 没有匹配关键词时,保留原空值
    else:
        return row['Problem']

df['Problem'] = df.apply(fill_problem, axis=1)

注意事项

  • 如果笔记中同时存在多个关键词,上述方法都会按判断顺序优先赋值,你可以根据需求调整关键词的判断顺序。
  • 如果空值行的笔记没有匹配到任何关键词,Problem列会保持原空值。

内容的提问来源于stack exchange,提问作者Batuhan Metin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:55:15