Python 每年四舍五入

Python 每年四舍五入,python,pandas,datetime,Python,Pandas,Datetime,这里是Python和熊猫初学者 我想把熊猫数据框列四舍五入到年。7月1日之前的日期必须四舍五入到当年,7月1日之后的日期必须四舍五入到下一年 例如: 2011-04-05必须四舍五入到2011 2011-08-09必须四舍五入到2012 2011-06-30必须四舍五入到2011 2011-07-01必须四舍五入到2012 我所尝试的: pd.series.dt.round(freq='Y') 给出错误:ValueError:是非固定频率 dataframe列有各种各样的日期,从1945年一直到

这里是Python和熊猫初学者

我想把熊猫数据框列四舍五入到年。7月1日之前的日期必须四舍五入到当年,7月1日之后的日期必须四舍五入到下一年

例如:

2011-04-05
必须四舍五入到
2011

2011-08-09
必须四舍五入到
2012

2011-06-30
必须四舍五入到
2011

2011-07-01
必须四舍五入到
2012

我所尝试的:

pd.series.dt.round(freq='Y')

给出错误:
ValueError:是非固定频率

dataframe列有各种各样的日期,从1945年一直到2021年。因此,如果df.date<2011-07-01:df['date']+pd.offsets.YearBegin(-1)不起作用,一个简单的

我还尝试了
dt.to_period('Y')
函数,但是我无法给出7月1日前后的参数


有关于如何解决此问题的提示吗?

假设您有以下数据帧:

日期
0 2011-04-05
1 2011-08-09
2 2011-06-30
3 2011-07-01
4 1945-06-30
5 1945-07-01
然后:

#转换为日期时间:
df[“日期”]=pd.to_datetime(df[“日期”])
df[“年”]=np.where(
(df[“日期”].dt.month<7)、df[“日期”].dt.year、df[“日期”].dt.year+1
)
打印(df)
印刷品:

日期年份
0 2011-04-05  2011
1 2011-08-09  2012
2 2011-06-30  2011
3 2011-07-01  2012
4 1945-06-30  1945
5 1945-07-01  1946

一个迂回的年份是将日期值转换为字符串,将它们分开,然后在循环中对它们进行分类,如下所示:

for i in df["Date"]: # assuming the column's name is "Date"

   thisdate = df["Date"] # extract the ith element of Date
   thisdate = str(thisdate) # convert to string
   datesplit = thisdate.split("-") # split

   Yr = int(datesplit[0]) # get the year # convert year back to a number
   Mth = int(datesplit[1]) # get the month # convert month back to a number

   if Mth < 7: # any date before July
      rnd_Yr = Yr
   else: # any date after July 1st
      rnd_Yr = Yr + 1
df[“Date”]中i的
:#假设列的名称为“Date”
thisdate=df[“日期”]#提取日期的第i个元素
thisdate=str(thisdate)#转换为字符串
datesplit=thisdate.split(“-”)#split
Yr=int(datesplit[0])#获取年份#将年份转换回数字
Mth=int(datesplit[1])#获取月份#将月份转换回数字
如果Mth<7:#7月之前的任何日期
rnd_Yr=Yr
其他:#7月1日之后的任何日期
rnd_Yr=Yr+1

一个快速修复方法是添加6个月的时间增量,然后只取一年。可能比在文档中查找舍入更容易。