2015-04-17 5 views
8

मेरे पास दिनांक कॉलम के साथ एक पांडा डेटा फ्रेम है, और मैं बूलियन मानों का एक नया स्तंभ जोड़ने की कोशिश कर रहा हूं जो इंगित करता है कि दी गई तिथि छुट्टी है या नहीं।पांडा: यह जांचना कि क्या कोई तारीख छुट्टी है और बूलियन मान असाइन कर रहा है

कोड निम्नलिखित है, लेकिन यह काम नहीं करता है (सभी मान गलत हैं) क्योंकि प्रकार अलग दिखते हैं, और मैं यह नहीं समझ सकता कि पांडा डेटा फ्रेम में 'तिथि' कैसे प्राप्त करें छुट्टियों के समान प्रकार:

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]) 
+0

क्या आप हमें 'यूएसएफडरल होलीडे कैलेंडर' के लिए घोषणा दिखा सकते हैं? –

+0

pandas.tseries.holiday से आयात करें यूएसएफडरल होलीडे कैलेंडर – Gopala

उत्तर

14

आपको कुछ भी बदलने की आवश्यकता नहीं है। बस सीधे तुलना करें। 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 

नोट कि जुलाई 4, 2015 एक शनिवार को गिर जाता है।

2

मुझे लेखक के समान समस्या थी, और प्रदान किया गया दूसरा फिक्स मेरे लिए काम नहीं करता था। यह काम करता है:

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

जैसा कि मैंने कहा, एक 'थोड़ा अधिक गूढ़ प्रारूप'। यदि आपको 'डेटाटाइम 64' में कनवर्ट करने की आवश्यकता है, तो आपके 'दिनांक' कॉलम में एक प्रारूप है जो 'पांडा' सीधे पहचानने में विफल रहा। इस तरह के मामलों के लिए, एक निश्चित रूप से एक रूपांतरण आवश्यक है। ओपी के अनुरोध के संबंध में, उन्होंने अपनी तारीखों को "उचित" पायथन डेटा प्रकार में 'to_pydatetime()' के माध्यम से परिवर्तित किया, जो 'पांडा' किसी समस्या के साथ परिवर्तित हो सकता है। :) फिर भी, एक मामले को संबोधित करने के लिए +1 मुझे पकड़ने से परेशान नहीं था। – Manhattan

+0

यह सुनिश्चित नहीं है कि ऐसा इसलिए था क्योंकि मेरे 'दिनांक' कॉलम में भी समय था, लेकिन मुझे ऊपर दिए गए उत्तर के बजाय इस समाधान का उपयोग करना पड़ा। धन्यवाद एमएच। – pshep123

संबंधित मुद्दे