问题描述
我有大量的时间序列数据,但是由于某些原因,想将某个dataframe的年份更改为增加一年。我的 MWE 是
import pandas as pd
from datetime import timedelta
sale_df = pd.DataFrame({
'sale_date': ['02/24/2020','02/25/2020','02/26/2020', '02/27/2020'],
'sale_id': ['01','02','03','04']})
sale_df['sale_date'] = pd.to_datetime(sale_df['sale_date'])
sale_df['sale_date'] = sale_df['sale_date'] + timedelta(days=365)
print(sale_df)
错误分析:
由于datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)方法最大只能填入weeks,而不能对years做改变,所以当采用days=365时,如果遇到像2020年这样的闰年的话,就会对日期发生改变,从而影响到后续与另外一个dataframe做merge。
解决方案:
我们可以使用date.replace:
current_year = sale_df['sale_date'].dt.year.iloc[0]
sale_df['sale_date'] = sale_df['sale_date'].apply(lambda x: x.replace(year=current_year+1))
sale_date sale_id
0 2021-02-24 01
1 2021-02-25 02
2 2021-02-26 03
3 2021-02-27 04
祝大家都能成功排除万难,编程之路一帆风顺!!!