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

Python 3.9:修改正则以提取多组数据并存入DataFrame列

适配多模式的DataFrame正则提取方案

问题背景

需要从DataFrame的name列中提取两类信息:文本主体内容和逗号后的数字ID,但现有正则仅适配前两行格式,需修改以覆盖所有样本模式。

样本name列数据

name
?|{Type 2 diabetes mellitus, susceptibility to}, 125853 (3)
{Type 2 diabetes mellitus}, 125854 (3)
17,20-lyase deficiency, isolated, 202110 (3)
17-alpha-hydroxylase/17,20-lyase deficiency, 202110 (3)
?Agammaglobulinemia 4, 613502 (3)
?[Dysalbuminemic hypertriiodothyroninemia], 615999 (3)
3p- syndrome (4)
3m-syndrome (4)

当前仅适配部分行的代码

df_new = df.join(df[name].str.extractall("{(.*)}, (.*) \(")[0]
                                       .unstack()
                                       .add_prefix('newColumn'))

解决方案

修改后的正则表达式与代码

使用能覆盖所有模式的正则,结合str.extract(单组提取无需extractall)完成适配:

import pandas as pd

# 构建示例DataFrame
data = {
    'name': [
        '?|{Type 2 diabetes mellitus, susceptibility to}, 125853 (3)',
        '{Type 2 diabetes mellitus}, 125854 (3)',
        '17,20-lyase deficiency, isolated, 202110 (3)',
        '17-alpha-hydroxylase/17,20-lyase deficiency, 202110 (3)',
        '?Agammaglobulinemia 4, 613502 (3)',
        '?[Dysalbuminemic hypertriiodothyroninemia], 615999 (3)',
        '3p- syndrome (4)',
        '3m-syndrome (4)'
    ]
}
df = pd.DataFrame(data)

# 提取并合并结果
df_new = df.join(
    df['name'].str.extract(r'^[?|]*[{\[]?(.*?)[}\]]?,?\s*(\d+)\s*\(', expand=True)
    .rename(columns={0: 'text_content', 1: 'id_number'})
)

# 查看结果
print(df_new)

正则表达式说明

^[?|]*[{\[]?(.*?)[}\]]?,?\s*(\d+)\s*\( 各部分作用:

  • ^[?|]*:匹配行首任意数量的?或|前缀
  • [{\[]?:匹配可选的{或[文本包裹符
  • (.*?):非贪婪匹配文本主体,避免误匹配到后续逗号
  • [}\]]?,?:匹配可选的}或]包裹符,以及后续可选的逗号
  • \s*(\d+)\s*\(:匹配数字ID,忽略前后空格,匹配到(前结束

提取结果示例

最终df_new会新增两列:

  • text_content:提取后的纯文本(去掉前缀、包裹符)
  • id_number:对应的数字ID,包括最后两行无逗号的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:07:06