2015-02-20 9 views
10

पर आधारित पंक्तियों को हटाने, मैं एक दिनांक कॉलम के आधार पर डेटाफ्रेम की पंक्तियों को हटाने की कोशिश कर रहा हूं; [Delivery Date]पांडस - पायथन, दिनांक कॉलम

मुझे 6 महीने से अधिक पुरानी पंक्तियों को हटाने की जरूरत है, लेकिन वर्ष 1 9 70 के बराबर नहीं है।

2 चर बना लिया है:

from datetime import date, timedelta 
sixmonthago = date.today() - timedelta(188) 

import time 
nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y') 

लेकिन मैं कैसे [Delivery Date] स्तंभ का उपयोग इन दो चर के आधार पर पंक्तियों को हटाने के लिए, पता नहीं है।

कोई भी सही समाधान प्रदान कर सकता है?

उत्तर

8

तुम सिर्फ उन्हें बाहर फ़िल्टर कर सकते हैं:

df[(df['Delivery Date'].dt.year == 1970) | (df['Delivery Date'] >= sixmonthago)] 

यह सभी पंक्तियों रिटर्न जहां 1970 है या तिथि 6 महीने से कम है।

आप बूलियन अनुक्रमण का उपयोग करें और df फिल्टर करने के लिए कई शर्तें पारित कर सकते हैं, कई स्थितियों के लिए आप ऑपरेटर पूर्वता के कारण सरणी ऑपरेटरों तो or के बजाय |, और शर्तों के आसपास कोष्ठक का उपयोग करने की आवश्यकता है।

चेक boolean indexing

+0

धन्यवाद .. मैं एक वापसी त्रुटि हो रही है: लेखन त्रुटि: 'केवल .dt एक्सेसर उपयोग कर सकते हैं डेटेटिमेलिक मानों के साथ '- शायद अपने स्वयं के अलग प्रश्न की आवश्यकता है, लेकिन क्या इसका मतलब है कि मुझे [डिलिवरी तिथि] को समय-समय पर बदलना है? क्षमा करें, मैं इस –

+0

के लिए काफी नया हूं, आपके पास डेटाटाइम्स की बजाय स्ट्रिंग हैं, आप 'डीएफ [' डिलिवरी डेट '] = pd.to_datetime (डीएफ [' डिलिवरी डेट '])' – EdChum

2

के लिए स्पष्टीकरण डॉक्स यकीन है कि गणना के ही पूर्व "6 महीने के लिए" सटीक है। आप 188 दिनों में हार्डकोडिंग नहीं करना चाहेंगे। सभी महीनों को समान रूप से नहीं बनाया जाता है।

from datetime import date 
from dateutil.relativedelta import relativedelta 

#http://stackoverflow.com/questions/546321/how-do-i-calculate-the-date-six-months-from-the-current-date-using-the-datetime 
six_months = date.today() - relativedelta(months = +6) 

फिर आप निम्न तर्क लागू कर सकते हैं।

import time 
nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y') 

df = df[(df['Delivery Date'].dt.year == nineteen_seventy.tm_year) | (df['Delivery Date'] >= six_months)] 

आप वास्तव में dataframe के वर्गों ड्रॉप करना चाहते हैं, तो आप निम्न कर सकते हैं:

df = df[(df['Delivery Date'].dt.year != nineteen_seventy.tm_year) | (df['Delivery Date'] < six_months)].drop(df.columns) 
+1

कर रहे हैं, यह बदल रहा है त्रुटि: ड्रॉप() कम से कम 2 तर्क लेता है, 1 दिया –

+0

... अब जाने के लिए अच्छा होना चाहिए। – andrewwowens

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