如何在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
相关产品推荐
相关产品推荐

