将不规则日期格式转换为年格式

2024-05-12 18:17:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

          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中提取year only,以获得标准格式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')

有人能帮我吗?谢谢


Tags: to数据onlydf标准datetimedate格式
1条回答
网友
1楼 · 发布于 2024-05-12 18:17:16

在示例数据中,所有日期时间都被正确解析,因此添加了^{}

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

另一个想法是将值转换为字符串,并对长度为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

相关问题 更多 >