在 pandas.DataFrame 中更改年份

问题描述

我有大量的时间序列数据,但是由于某些原因,想将某个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

祝大家都能成功排除万难,编程之路一帆风顺!!! 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是修改过的代码,其主要是将numpy和pandas的导入方式进行了修改,并且在matplotlib.pyplot的导入语句添加了as关键字,以便在使用时不需要使用完整的模块名: ```python import pandas as pd import numpy as np np_load_old = np.load np.load = lambda *a,**k: np_load_old(*a, allow_pickle=True, **k) import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False data = np.load('D:\\temp\\test\\国民经济核算季度数据.npz') name = data['columns'] values = data['values'] plt.figure(figsize = (8,7)) plt.scatter(values[:,0],values[:,3], marker = 'o',c = '#0099FF') plt.scatter(values[:,0],values[:,4], marker = '*',c = '#00FF00') plt.scatter(values[:,0],values[:,5], marker = '+',c = '#FF3300') plt.xlabel('年份') plt.ylabel('生产总值(亿元)') plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45) plt.title('2000-2017各产业季度生产总值散点图') plt.legend(['第一产业','第二产业','第三产业']) plt.savefig('D:\\temp\\test\\2022231168许开国c.png') plt.show() name1 = pd.DataFrame(list(data['columns'])) values1 = pd.DataFrame(list(data['values'])) with pd.ExcelWriter('D:\\temp\\test\\2022231201许开国c.xlsx') as writer: name1.to_excel(writer, sheet_name= 'Sheet1', index=False, header=True) values1.to_excel(writer, sheet_name='Sheet2', index=False, header=True) ``` 这样的话,你便可以在运行程序时直接使用pd和np作为pandas和numpy的别名,使用plt来代替matplotlib.pyplot。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值