我正在使用一个数据框,其中的一个日期列具有不规则的日期格式,即:
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')
有人可以帮助我吗?谢谢。
答案 0 :(得分:5)
在示例数据中,所有日期时间均已正确解析,因此添加了Series.dt.year
:
df['year'] = pd.to_datetime(df['date'], errors='coerce').dt.year
另一个想法是将值转换为字符串,并将Series.str.extract
用于长度为4
的整数:
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