如何将Pandas DataFrame日期列转换为对应年份的最后一天?
将Pandas DataFrame的日期转换为对应年份的最后一天
问题场景
现有如下Pandas DataFrame:
Acount Type Id Date Value Per 0 Exp P IQ 2016-03-31 -23421.170324 3M 1 Exp P IQ 2017-03-31 -44803.599908 3M 2 Exp P IQ 2018-03-31 -29294.611346 3M 3 Exp P IQ 2019-03-31 -9463.281704 3M
需要将Date列转换为对应年份的12月31日,得到目标格式。
解决方案
以下是几种高效实现方式:
方法1:通过apply构造年末时间戳
先确保Date列为datetime类型,再逐行替换为当年最后一天:
import pandas as pd # 转换为datetime类型(若原列已是则可省略) df['Date'] = pd.to_datetime(df['Date']) # 替换为当年12月31日 df['Date'] = df['Date'].apply(lambda x: pd.Timestamp(x.year, 12, 31))
方法2:利用周期(Period)的年末方法
这是更简洁的内置方法,直接通过周期转换获取年末时间:
df['Date'] = pd.to_datetime(df['Date']) df['Date'] = df['Date'].dt.to_period('Y').dt.end_time
方法3:字符串拼接转换
通过提取年份拼接日期字符串,再转回datetime类型:
df['Date'] = pd.to_datetime(df['Date']) df['Date'] = pd.to_datetime(df['Date'].dt.year.astype(str) + '-12-31')
验证结果
执行任意方法后,DataFrame将变为:
Acount Type Id Date Value Per 0 Exp P IQ 2016-12-31 -23421.170324 3M 1 Exp P IQ 2017-12-31 -44803.599908 3M 2 Exp P IQ 2018-12-31 -29294.611346 3M 3 Exp P IQ 2019-12-31 -9463.281704 3M
内容的提问来源于stack exchange,提问作者Valeria Arango
相关产品推荐
相关产品推荐

