python - 如何从Python中不同类型的日期中提取年份

标签 python regex pandas date

我有一列包含不同类型的日期,例如:

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/

相关文章:

php - preg_split - 按空格和所选字符分割,但将字符保留在数组中

javascript - 使用 indexOf 匹配精确的字符串

python - 将字符串中的随机值替换为随机值

python - 属性错误 : 'module' object has no attribute 'open'

python - 合并3个同名数据库,并在python中重命名它们

regex - 使用 PRXNEXT 捕获关键字的所有实例

python - Pandas-根据列值查找行中的第一次出现

python - Pandas:使用 np.nan 选择 NaN 值

python - 用 Pandas 中的另一个值替换某些列中的所有负值

python - 改进从 0 以外的索引开始迭代 python 列表中每个项目的代码