You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:00:56