仅在熊猫中将不规则日期格式转换为年份



我正在使用一个数据帧,有一个日期列的日期列,日期格式不规则,即:

date
0         1991
1         1970
2   1991/01/01
3   1996-01-01
4   1996-06-30
5   1995-12-31
6   1997-01-01
7     1970/1/1
8   1996-01-01
9   1997-01-01
10  1996-01-01

如何仅从date中提取年份以获取具有标准格式XXXX的新列year,该列仅代表年份。

year
0         1991
1         1970
2         1991
3         1996
4         1996
5         1995
6         1997
7         1970 
8         1996
9         1997
10        1996

使用df.date.unique(),我得到以下输出:

array([2015, 2008, 2021, 1999, 2001, 2000, 1997, 1995, 1998,
datetime.datetime(1905, 7, 2, 0, 0),
datetime.datetime(1905, 7, 7, 0, 0),
datetime.datetime(2012, 10, 1, 0, 0),
datetime.datetime(2010, 8, 1, 0, 0),
datetime.datetime(2009, 1, 1, 0, 0), '2019', 1992, ...], dtype=object)

我使用以下代码,但仅从此列中错过了年份日期:

df['date'] = pd.to_datetime(df['date'], errors='coerce').astype(str).replace("NaT", "")
df['year'] = pd.to_datetime(df['date']).dt.year
# df['year'] = pd.to_datetime(df['date']).dt.to_period('Y')

有人可以帮助我吗?谢谢。

在示例数据中,所有日期时间都已正确解析,因此添加了Series.dt.year

df['year'] = pd.to_datetime(df['date'], errors='coerce').dt.year

另一个想法是将值转换为字符串,并对长度为4的整数使用Series.str.extract

df['year'] = df['date'].astype(str).str.extract('(d{4})').astype(int)

print (df)
date  year
0         1991  1991
1         1970  1970
2   1991/01/01  1991
3   1996-01-01  1996
4   1996-06-30  1996
5   1995-12-31  1995
6   1997-01-01  1997
7     1970/1/1  1970
8   1996-01-01  1996
9   1997-01-01  1997
10  1996-01-01  1996

最新更新