You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中将日期时间列转为月精度并统一日期为1日

问题描述

我有月级时间序列数据,DataFrame的date列包含带具体日期的时间戳,需要将所有日期统一转为当月1日(格式为YYYY-MM-01)。尝试用df['date'] = pd.to_datetime(df['date'], format='%Y-%m')没实现需求,比如无法把1997-02-02转为1997-02-01,求正确解法。

原始数据

date
0   1997-01-01 00:00:00
1   1997-02-02 00:00:00
2   1997-03-03 00:00:00
3   1997-04-02 00:00:00
4   1997-05-02 00:00:00
5   1997-06-01 00:00:00
6   1997-07-01 00:00:00
7   1997-08-31 00:00:00
8   1997-09-30 00:00:00
9   1997-10-31 00:00:00
10  1997-11-30 00:00:00
11  1997-12-31 00:00:00
12  1998-01-01 00:00:00
13  1998-02-28 00:00:00
14  1998-03-31 00:00:00

预期输出

date
0   1997-01-01
1   1997-02-01
2   1997-03-01
3   1997-04-01
4   1997-05-01
5   1997-06-01
6   1997-07-01
7   1997-08-01
8   1997-09-01
9   1997-10-01
10  1997-11-01
11  1997-12-01
12  1998-01-01
13  1998-02-01
14  1998-03-01
解决方法

你之前的代码逻辑有误,format='%Y-%m'是用来解析仅含年月格式的字符串,而你的数据已是完整时间戳,所以该参数不起作用。以下三种方法可实现需求:

方法1:周期转时间戳

先将日期转为月份周期,再自动映射为当月第一天的时间戳:

df['date'] = pd.to_datetime(df['date']).dt.to_period('M').dt.to_timestamp()

方法2:直接替换日期

将列转为datetime类型后,直接把日部分替换为1:

df['date'] = pd.to_datetime(df['date']).dt.replace(day=1)

方法3:字符串拼接

提取年月字符串后手动拼接"-01",再转回datetime类型:

df['date'] = pd.to_datetime(pd.to_datetime(df['date']).dt.strftime('%Y-%m') + '-01')

其中方法1、2效率更高,优先推荐使用。

内容的提问来源于stack exchange,提问作者Danish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:54:19