पंडों डेटाफ़्रेम को तिथि के अनुसार क्रमबद्ध करें


98

मेरे पास पंडों का डेटाफ्रेम इस प्रकार है:

Symbol  Date
A       02/20/2015
A       01/15/2016
A       08/21/2015

मैं इसे क्रमबद्ध करना चाहता हूं Date, लेकिन कॉलम सिर्फ एक है object

मैंने कॉलम को एक दिनांक ऑब्जेक्ट बनाने की कोशिश की, लेकिन मैं एक ऐसे मुद्दे पर भाग गया, जहां उस प्रारूप की आवश्यकता प्रारूप नहीं है। आवश्यक प्रारूप 2015-02-20,आदि है ।

इसलिए अब मैं यह पता लगाने की कोशिश कर रहा हूं कि कैसे '' अमेरिकी '' तारीखों को आईएसओ मानक में परिवर्तित किया जा सकता है, ताकि मैं उन्हें तारीख की वस्तु बना सकूं, ताकि मैं उनके द्वारा छांट सकूं।

मैं इन अमेरिकी तिथियों को आईएसओ मानक में कैसे बदलूंगा, या क्या मैं पांडा के भीतर एक और सीधे आगे की विधि है जो मुझे याद आ रही है?

जवाबों:


149

आप pd.to_datetime()किसी डेटाटाइम ऑब्जेक्ट में कनवर्ट करने के लिए उपयोग कर सकते हैं । यह एक प्रारूप पैरामीटर लेता है, लेकिन आपके मामले में मुझे नहीं लगता कि आपको इसकी आवश्यकता है।

>>> import pandas as pd
>>> df = pd.DataFrame( {'Symbol':['A','A','A'] ,
    'Date':['02/20/2015','01/15/2016','08/21/2015']})
>>> df
         Date Symbol
0  02/20/2015      A
1  01/15/2016      A
2  08/21/2015      A
>>> df['Date'] =pd.to_datetime(df.Date)
>>> df.sort('Date') # This now sorts in date order
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A

भविष्य की खोज के लिए, आप सॉर्ट स्टेटमेंट को बदल सकते हैं:

>>> df.sort_values(by='Date') # This now sorts in date order
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A

1
मेरे पास एक df ['दिनांक'] भी है। अनोखा () तरह से पहले, जो डेटाफ़्रेम के बजाय एक श्रृंखला देता है। यह 2015-02-19T18 में 02/20/2015 बनाता है: 00: 00.000000000-0600 जो फिर 2015-02-19 में विभाजित हो जाता है। क्या एक दिन जोड़ने का कोई तरीका है? या इसे ठीक करने का एक और औपचारिक तरीका?
nicholas.reichel

1
df.Date.astype(np.int64)युगांतर के लिए काम करना चाहिए
JAB

1
पता चलता है कि युग 18:00 घंटे आदि के बाद से गलत होगा, मुझे उनकी जरूरत 00:00 घंटे होगी। मेरे पास युगांतर में बदलने का एक तरीका है यदि मैं सिर्फ तारीख वस्तुओं को एक समय, या गलत समय नहीं मिल सकता है।
nicholas.reichel

मेरे लिए pd.to_datetime(df.Date)[0]रिटर्नTimestamp('2015-02-20 00:00:00')
JAB

मुद्दे के अधिक औपचारिक विवरण के साथ नया सवाल शुरू करना
nicholas.reichel

98

sortविधि को पदावनत और प्रतिस्थापित किया गया है sort_values। उपयोग करने के बाद डेटाटाइम ऑब्जेक्ट में कनवर्ट करने के बादdf['Date']=pd.to_datetime(df['Date'])

df.sort_values(by=['Date'])

नोट: इन-प्लेस और / या अवरोही क्रम में सॉर्ट करने के लिए (सबसे हाल का पहला):

df.sort_values(by=['Date'], inplace=True, ascending=False)

3
मैं आपको इसके साथ उपयोग करने का सुझाव दूंगा: df.sort_values ​​(by = ['तारीख'])
FLBKernel

मैं अपने दिमाग को यह सोच कर मिटा रहा था कि मेरी छँटाई में डुप्लिकेट क्यों थे। inplace = यह तय है कि सही है। बहुत बहुत धन्यवाद!
डेव डेविस

11

@ JAB का जवाब तेज और संक्षिप्त है। लेकिन यह बदल जाता है जिसे DataFrameआप छाँटने की कोशिश कर रहे हैं, जिसे आप चाहते हैं या नहीं कर सकते हैं।

( नोट : आप लगभग निश्चित रूप से यह चाहते हैं, क्योंकि आपकी तारीख कॉलम तारीखें होनी चाहिए, तार नहीं!)

अप्रत्याशित घटना में कि आप तिथियों को तिथियों में बदलना नहीं चाहते हैं, आप इसे अलग तरीके से भी कर सकते हैं।

सबसे पहले, अपने सॉर्ट किए गए Dateकॉलम से इंडेक्स प्राप्त करें :

In [25]: pd.to_datetime(df.Date).order().index
Out[25]: Int64Index([0, 2, 1], dtype='int64')

फिर इसे अपने मूल को अनुक्रमित करने के लिए उपयोग करें DataFrame, इसे अछूता छोड़कर:

In [26]: df.ix[pd.to_datetime(df.Date).order().index]
Out[26]: 
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A

जादू!

नोट: पंडों के संस्करणों के लिए 0.20.0 और बाद में, के locबजाय का उपयोग करें ix, जो अब पदावनत है।


0

दिनांक कॉलम का डेटा नीचे दिए गए कोड का उपयोग करके पढ़ा जा सकता है:

data = pd.csv(file_path,parse_dates=[date_column])

एक बार कोड की उपरोक्त लाइन का उपयोग करके डेटा को पढ़ने के बाद, दिनांक के बारे में जानकारी वाले कॉलम का उपयोग करके एक्सेस किया जा सकता है pd.date_time():

pd.date_time(data[date_column], format = '%d/%m/%y')

आवश्यकता के अनुसार तारीख का प्रारूप बदलने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.