熊猫:检查日期是否为假日并指定布尔值

时间:2015-04-17 01:55:26

标签: python pandas

我有一个带有日期列的pandas数据框,我正在尝试添加一个新的布尔值列,指示给定日期是否为假日。

以下是代码,但它不起作用(所有值都是False)因为类型似乎不同,我无法弄清楚如何在pandas数据框中获取'date'是与假期相同的类型:

cal = USFederalHolidayCalendar()
holidays = cal.holidays(start=train_df['date'].min(),
                        end=train_df['date'].max()).to_pydatetime()
train_df['holiday'] = train_df['date'].isin(holidays)
print type(train_df['date'][1])
print type(holidays[0])

2 个答案:

答案 0 :(得分:24)

你不需要转换任何东西。只是直接比较。 pandas非常聪明,可以比较日期和时间方面的许多不同类型。如果您在日期/时间兼容性方面遇到问题,则必须采用稍微深奥的格式。

import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar as calendar

dr = pd.date_range(start='2015-07-01', end='2015-07-31')
df = pd.DataFrame()
df['Date'] = dr

cal = calendar()
holidays = cal.holidays(start=dr.min(), end=dr.max())

df['Holiday'] = df['Date'].isin(holidays)
print df

结果:

         Date Holiday
0  2015-07-01   False
1  2015-07-02   False
2  2015-07-03    True
3  2015-07-04   False
4  2015-07-05   False
5  2015-07-06   False
6  2015-07-07   False
7  2015-07-08   False
8  2015-07-09   False
9  2015-07-10   False
10 2015-07-11   False
11 2015-07-12   False
12 2015-07-13   False
13 2015-07-14   False
14 2015-07-15   False
15 2015-07-16   False
16 2015-07-17   False
17 2015-07-18   False
18 2015-07-19   False
19 2015-07-20   False
20 2015-07-21   False
21 2015-07-22   False
22 2015-07-23   False
23 2015-07-24   False
24 2015-07-25   False
25 2015-07-26   False
26 2015-07-27   False
27 2015-07-28   False
28 2015-07-29   False
29 2015-07-30   False
30 2015-07-31   False

请注意,2015年7月4日是星期六。

答案 1 :(得分:2)

我遇到了与作者相同的问题,并且提供的其他修复程序对我不起作用。这就是工作:

train_df['holiday'] = train_df['date'].dt.date.astype('datetime64').isin(holidays)