如何在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
相关产品推荐
相关产品推荐

