首页 > 解决方案 > 如何检查熊猫数据框列中的年份是否为闰年 - Python

问题描述

我有一个看起来像这样的数据集:

        DOB    DOB_year
0      1964-01-06  1964
1      1984-01-13  1984
2      1992-01-20  1992
3      1972-01-27  1972
4      2001-02-03  2001
5      2011-02-10  2011
6      1950-02-17  1950
7      1968-02-24  1968

    [318495 rows x 2 columns]

我想要一个像这样的输出:

             DOB       DOB_year      is_leap
    0      1964-01-06  1964           TRUE
    1      1983-01-13  1984           FALSE
    2      1992-01-20  1992           TRUE
    3      1972-01-27  1972           TRUE
    4      2001-02-03  2001           FALSE
    5      2011-02-10  2011           FALSE
    6      1950-02-17  1950           FALSE
    7      1968-02-24  1968           TRUE

下面是代码:

def is_leapCheck(s):
return (s.dt.year % 4 == 0) & ((s.dt.year % 100 != 0) | (s.dt.year % 400 == 0)) & (s.dt.month == 2) & (s.dt.day == 29)

dob_df['is_leap']=is_leapCheck(pd.to_datetime(dob_df['year']))

代码的输出将所有 the_leap 值都设为 FALSE,而根本没有 TRUE 值。我不确定我在哪里出错了。任何帮助表示赞赏

标签: pythonpandasdatetimeleap-year

解决方案


您可以calendar在以下(玩具)示例中使用该模块:

import calendar
import pandas as pd


frame = pd.DataFrame(data=[2012], columns=['year'])
frame['is_leap'] = frame['year'].apply(lambda e: calendar.isleap(e))
print(frame)

输出

   year  is_leap
0  2012     True

推荐阅读