如何在Pandas RE .str.extract()

时间:2018-03-13 10:49:40

标签: python regex pandas date operands

我是新手,确信这在我的代码中是愚蠢的。在我的辩护中,我尝试重新阅读Python RE文档here然后再询问和搜索,但到目前为止看不到重复的问题(这让我感到惊讶。)

在DataFrame之外我在这里有一个重复的例子:

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

但在我的Dataframe(df1)中,我有以下内容:

index     text
0         My birthday is 2/21/19
1         Your birthday is 4/1/20
2         my best friend's birthday is 24 Jan 2001.   

当我运行以下代码时:

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

我得到以下结果:

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

我试图使用括号,重新阅读文档以及其他一些导致无休止错误的调整。我确定这是一个明显的错误,但我没有看到它。有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

|