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

如何在pandas DataFrame单列中应用多条件实现闰年判断逻辑

pandas DataFrame新增闰年判断列实现方案

核心判断逻辑

闰年需同时满足以下两个条件:

  • 能被4整除
  • 能被400整除,或者 不能被100整除

实现方法

方法1:使用矢量化运算(推荐,执行效率远高于行遍历)

不需要自定义函数和apply遍历行,直接按条件做布尔运算即可:

import pandas as pd

df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/AirPassengers.csv")
# 提取年份
df['year'] = pd.to_datetime(df['date']).dt.year
# 合并判断逻辑生成闰年列
cond1 = df['year'] % 4 == 0
cond2 = (df['year'] % 100 != 0) | (df['year'] % 400 == 0)
df['is_leap'] = cond1 & cond2

方法2:使用pandas内置属性(最简写法,无逻辑出错风险)

pandas的datetime类型自带is_leap_year属性,可直接判断闰年:

import pandas as pd

df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/AirPassengers.csv")
date_ser = pd.to_datetime(df['date'])
df['year'] = date_ser.dt.year
df['is_leap'] = date_ser.dt.is_leap_year

方法3:修正apply写法(仅作逻辑参考,不推荐用于大数据量场景)

将拆分的两个判断逻辑合并到同一个函数即可:

def is_leap_year(row):
    year = row['year']
    if year % 4 != 0:
        return False
    elif year % 100 != 0:
        return True
    else:
        return year % 400 == 0

df['is_leap'] = df.apply(is_leap_year, axis=1)

内容的提问来源于stack exchange,提问作者cbz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:45:04