如何从混合格式的列中提取年份

How to extract year from a column with mixed formats

我的数据集中有一列看起来有许多不同格式的日期。有时只有年月,有时只有年:

Date
1 January 1980
Oct-74
Oct-17
1980.0
-200
-50
8

我只想从此列中提取年份。对于格式为“mmm-yy”的日期,我想假设它们在 1921 年到 2020 年之间。所以我上面的列应该是这样的:

Year
1980
1974
2017
1980
-200
-50
8

如何在 Python 中执行此操作?任何帮助将不胜感激。

#here is the code for the first dataframe
data = {'date': ['1 January 1980','Oct-74', 'Oct-17', '1980.0', '-200.0', '-50']}  
df= pd.DataFrame(data)
df

试试这个:

data = {'date': ['1 January 1980','Oct-74', 'Oct-17', '1980.0', '-200.0', '-50', '8']}  
df= pd.DataFrame(data)
temp = df['date'].str.replace('[a-zA-Z]{3}-', '+').str.extract('([-+\.\d]{1,}$)')
m1 = temp[0].str.contains('\+')
temp[0] = temp[0].astype(float)
temp[0] = temp[0].where(~((m1)&(temp[0]>=21)), 1900+temp[0])
temp[0] = temp[0].where(~((m1)&(temp[0]<21)), 2000+temp[0])

输出: