如何检查 pandas 数据框列中的年份是否为闰年 - Python

How to check if years in a pandas dataframe column are leap years - 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 值。我不确定我哪里出错了。任何帮助表示赞赏

您可以使用 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

您的情况略有偏差,但这里有一个解决方案,它使用与语言无关的方式来确定年份是否为闰年:

condition = (df.DOB.dt.year.mod(4).eq(0) 
    & (df.DOB.dt.year.mod(100).ne(0) | df.DOB.dt.year.mod(400).eq(0))
)

df.assign(isleap=np.where(condition, 'TRUE', 'FALSE'))

         DOB  DOB_year isleap
0 1964-01-06      1964   TRUE
1 1984-01-13      1984   TRUE
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