我有一列包含不同类型的日期,例如:
2\06\1998
21.11.1998
18-02-2001
03/05/1999
20 july 1999
我只想要年份。
我尝试了不同类型的正则表达式,例如:
def get_date(date):
number= re.findall('\[0-9]\-{0,1}\\{0,1}\/{0,1}\[0-9]\-{0,1}\\{0,1}\/{0,1}\[0-9]', date)
return number[6:]
但我无法提取年份。 对于这种情况最合适的正则表达式是什么? 执行两种类型的正则表达式不是问题,一种用于 dd/mm/yyyy 格式,另一种用于字母中带有月份的日期。
最佳答案
不要陷入正则表达式/“删除最后 4 个字符”的兔子洞。
如果到达其他格式的日期(例如 2019-08-27
),任何简单的正则表达式/剥离解决方案都将失败。
使用pd.to_datetime
让pandas处理解析,然后抓取dt.year
。
df = pd.DataFrame({'a': ['2/06/1998', '21.11.1998', '18-02-2001', '03/05/1999',
'20 july 1999', '2019-08-27']})
df['a'] = pd.to_datetime(df['a'])
print(df['a'].dt.year)
输出
0 1998
1 1998
2 2001
3 1999
4 1999
5 2019
注意:请注意,我必须更改斜杠的方向(2\06\1998
更改为 2/06/1998
),但这是一个非常小的代价为获得更强大的解决方案而付出代价。
关于python - 如何从Python中不同类型的日期中提取年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673840/