如何对Pandas RE使用RE或Operand。str.提取物()

2024-04-24 19:49:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我是个新手,我的代码里肯定有点傻。为我辩护,在询问和搜索之前,我尝试过重新阅读Python re documentation here,但到目前为止没有看到重复的问题(这让我感到惊讶)

在数据帧之外,我有一个重新工作的例子:

x = 'my best friend's birthday is 24 Jan 2001.'
print(re.findall('\d{1,2}\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\s\d{2,4}', x))
<Anaconda console returns:> 24 Jan 2001

但在我的数据框(df1)中,我有以下内容:

^{pr2}$

当我运行以下代码时:

^{3}$

我得到以下结果:

     dates
0    2/21/19
1    4/1/20
2    NaN

我尝试过使用括号,重新阅读文档,以及其他一些导致无休止的错误的调整。我敢肯定这是个明显的错误,但我看不出来。有人能帮忙吗?非常感谢。在


Tags: 数据代码refriendhereismydocumentation
1条回答
网友
1楼 · 发布于 2024-04-24 19:49:24

在pandas中使用.extract()时,必须有一个捕获组。OR前面的捕获组正在查找带有斜杠的日期。但是在OR之后,您只有一个非捕获组。在

在这里,我在整个搜索模式中放置了一个捕获,并且OR的每一侧也有一个非捕获组。在

import pandas as pd

df = pd.DataFrame({'text': ['My birthday is 2/21/19', 
    'Your birthday is 4/1/20', 
    'my best friend\'s birthday is 24 Jan 2001.']})

df.text.str.extract(
    r'((:?\d+[/-]\d+[/-]?\d*)|' + 
    r'(:?\d{1,2}\s(:?Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\s\d+))', 
    expand=False)[0]

# returns:
0        2/21/19
1         4/1/20
2    24 Jan 2001

相关问题 更多 >