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

如何在DataFrame的字符串列中提取特定度量值至新列?

提取药物名称中的度量值到新列的实现方法

需求概述

从数据集的name列字符串中提取度量值(仅匹配包含mg/ml/g的形式,如200ML、100MG),新增measurement列存储结果,无匹配值则填充NaN。

输入数据

nameprice
A CERUMEN UNIDOSE B/10 AFR125
ACARILBIAL SOL EXT FL/200ML8569
ACCULOL 0.5% CY FL/5ML563
ACEFLAMEX 100MG CP B/2012563
ACFOL 5MG COMP B/25896

期望输出

namepricemeasurement
A CERUMEN UNIDOSE B/10 AFR125NaN
ACARILBIAL SOL EXT FL/200ML8569200ML
ACCULOL 0.5% CY FL/5ML5635ML
ACEFLAMEX 100MG CP B/2012563100MG
ACFOL 5MG COMP B/258965MG

解决方案

不需要将列转为列表处理,直接使用Pandas的矢量化字符串方法结合正则表达式,可自动与原DataFrame的行对齐,避免匹配错位问题。

完整代码

import pandas as pd
import re
import numpy as np

# 构造示例数据集
data = {
    'name': [
        'A CERUMEN UNIDOSE B/10     AFR',
        'ACARILBIAL SOL EXT FL/200ML',
        'ACCULOL 0.5% CY FL/5ML',
        'ACEFLAMEX 100MG CP B/20',
        'ACFOL 5MG COMP B/25'
    ],
    'price': [125, 8569, 563, 12563, 896]
}
df = pd.DataFrame(data)

# 提取度量值:匹配数字+MG/ML/G(忽略大小写)
df['measurement'] = df['name'].str.extract(r'(\d+[MGMLgmL]+)', flags=re.IGNORECASE)

# 无匹配值填充为NaN(若需要字符串形式的"nan",可替换为df['measurement'] = df['measurement'].fillna('nan'))
df['measurement'] = df['measurement'].fillna(np.nan)

print(df)

代码说明

  1. 正则表达式:r'(\d+[MGMLgmL]+)'
    • \d+:匹配1个或多个数字
    • [MGMLgmL]+:匹配任意大小写的MG/ML/G组合,覆盖用户需求的所有格式
    • flags=re.IGNORECASE:忽略大小写,确保mg、ML等变体都能被匹配
  2. str.extract方法:Pandas内置的字符串提取方法,会自动将匹配结果映射到对应行,无匹配则返回NaN,无需手动维护索引对齐
  3. 填充NaN:根据需求选择填充为Pandas原生NaN或字符串形式的"nan"

内容的提问来源于stack exchange,提问作者Cláudio Rosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:40:38