如何使用Pandas创建days_in_year函数计算日期对应年份天数?
计算日期所属年份的总天数(Pandas实现)
嘿,我懂你想要的效果——给DataFrame加一列,显示每个日期对应的全年天数对吧?之前用daysinmonth属性轻松搞定月份天数,年份这块确实没现成的直接属性,但其实有好几种简单方法能实现,而且优先推荐向量化操作(比逐行apply效率高太多,数据量大的时候差异特别明显)!
首先先确认你的Date列已经是datetime类型,如果还没转的话,先执行这一步:
df['Date'] = pd.to_datetime(df['Date'])
方法1:利用闰年判断(最直观的向量化写法)
Pandas的日期类型自带is_leap_year属性,直接判断年份是否为闰年,再对应返回366或365:
import numpy as np df['days_in_year'] = np.where(df['Date'].dt.is_leap_year, 366, 365)
方法2:结合calendar模块(习惯apply写法的话用这个)
如果你更习惯像之前写daysinmonth那样用函数+apply,可以借助Python内置的calendar模块判断闰年:
import calendar def daysinyear(row): # 直接取日期的年份属性,不用转DatetimeIndex year = row['Date'].year return 366 if calendar.isleap(year) else 365 # 调用生成新列 df['days_in_year'] = df.apply(daysinyear, axis=1)
方法3:借助年末日期的dayofyear属性(巧妙的向量化写法)
当年12月31日的dayofyear值就是全年的天数,我们可以先把日期转成年份周期,再取年末日期的该属性:
df['days_in_year'] = df['Date'].dt.to_period('Y').dt.end_time.dt.dayofyear
这几种方法都能达到你想要的效果,优先选方法1或者方法3,尤其是数据量较大的时候,向量化操作的速度优势会非常明显!
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

