我是新手,请确保这在我的代码中有些愚蠢。在我的辩护中,我曾尝试在此处遍历Python RE文档,然后再进行查询和搜索,但到目前为止没有看到重复的问题(这使我感到惊讶。)
在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
但是在我的数据框(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
我尝试使用括号,重新阅读了文档,以及其他一些导致无休止错误的调整。我敢肯定这是一个明显的错误,但我看不到。有人可以帮忙吗?谢谢。
.extract()
在大熊猫中使用时,您必须有一个捕获组。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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句