pandas - series.str.extract 正在删除捕获组的第一个字符

Posted

技术标签:

【中文标题】pandas - series.str.extract 正在删除捕获组的第一个字符【英文标题】:pandas - series.str.extract is dropping the first character of the capture group 【发布时间】:2021-03-25 16:53:20 【问题描述】:

我需要从下一个系列中提取日期:


0 03/25/93 总访问时间(以分钟为单位):\n 1 名 6/18/85 初级保健医生:\n 2 sshe 计划自 7/8/71 起搬家 上门服务... 3 7 于 9/27/75 审核 C 分数 当前:\n 4 2/6/96 睡眠研究疼痛治疗疼痛等级 (N... 5 .Per 7/06/79 运动 D/O 注释:\n 6 4, 5/18/78 患者对当前 SU 的看法... 7 10/24/89 CPT 代码:90801 - 精神病诊断... 8 3/7/86 SOS-10 总分:\n 9 (4/10/71)Score-1Audit C 分数 当前:\n 10 (5/11/85) Crt-1.96, BUN-26; AST/ALT-16/22;白细胞... 11 4/09/75 SOS-10 总分:\n 12 8/01/98 与转诊医生沟通... 13 1/26/72 与转诊医生沟通... 14 5/24/1990 CPT 代码:90792:有医疗服务... 15 1/25/2011 CPT 代码:90792:带医疗服务... 16 4/12/82 总访问时间(以分钟为单位):\n 17 1; 10/13/1976 审计 C 分数,最高/日期:\n


我正在尝试使用以下正则表达式

df.str.extract('.(\d1,4/\d1,4/\d1,4).')

但是,既然我指定了 1,4,为什么它会删除前两个数字中的第一个数字?

例如,从第 7 行到第 17 行,它应该分别提取“10/24/89”和“10/13/1976”,而不是“0/24/89”和“0/13/1976”

我也在尝试在捕获组的开头添加一个“?:”,但它不起作用

先谢谢了!

【问题讨论】:

我认为您正面临正则表达式“贪婪”与“懒惰”的问题。 ***.com/q/2301285/6361531 哇!这是一个快速反应斯科特。我只需要添加一个“?”在星号之后。非常感谢! df.str.extract('.*?(\d1,4/\d1,4/\d1,4).*') 【参考方案1】:

我会在日期周围设置单词边界,即使用这种模式:

\b(\d+/\d+/\d+)\b

更新代码:

df['date'] = df['col'].str.extract('\b(\d+/\d+/\d+)\b')

这是一个regex demo,表明上述模式工作正常。

【讨论】:

以上是关于pandas - series.str.extract 正在删除捕获组的第一个字符的主要内容,如果未能解决你的问题,请参考以下文章

Pandas介绍

python pandas怎么用

如何安装pandas

idle中没有pandas

Python pandas用法

python(pandas模块)?