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

从DataFrame提取指定子串并写入新DataFrame的实现方法

解决方法

以下几种方式可以实现你的需求:

方法一:使用np.select(逻辑清晰,推荐)

适合多条件分支场景,明确指定每个条件对应的值:

import numpy as np

# 定义匹配条件与对应输出值
conditions = [
    df_input['Visit  '].str.contains('Pre'),
    df_input['Visit  '].str.contains('Post'),
    df_input['Visit  '].str.contains('Screening')
]
choices = ['Pre', 'Post', 'Screening']

# 赋值到目标列,无匹配项时返回NaN,可修改default参数设置默认值
df_output['VISIT'] = np.select(conditions, choices, default=np.nan)

方法二:使用str.extract直接提取关键词

通过正则表达式精准匹配并提取目标字符串:

# 正则匹配三个关键词中的任意一个,无匹配返回NaN
df_output['VISIT'] = df_input['Visit  '].str.extract(r'(Pre|Post|Screening)', expand=False)

方法三:自定义函数+apply

如果需要更灵活的逻辑判断,可自定义函数处理:

def get_visit_type(visit_text):
    if 'Pre' in visit_text:
        return 'Pre'
    elif 'Post' in visit_text:
        return 'Post'
    elif 'Screening' in visit_text:
        return 'Screening'
    else:
        return np.nan  # 可替换为其他默认值,比如空字符串''

df_output['VISIT'] = df_input['Visit  '].apply(get_visit_type)

之前代码的问题说明

  • 第一段代码:df_input[df_input['Visit '].str.contains('Pr|Po|Sc')]返回的是筛选后的整行数据,而df_output['VISIT']是单列,两者长度不匹配,因此报错"Columns must be the same length as key"。
  • 第二段代码:str.contains本身返回布尔值(True/False),自然会将布尔值写入目标列,不符合提取关键词的需求。

内容的提问来源于stack exchange,提问作者A-Simone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:10:29