Ich habe einen Pandas-Datenrahmen wie folgt:
Symbol Date
A 02/20/2015
A 01/15/2016
A 08/21/2015
Ich möchte es sortieren Date
, aber die Spalte ist nur eine object
.
Ich habe versucht, die Spalte zu einem Datumsobjekt zu machen, bin jedoch auf ein Problem gestoßen, bei dem dieses Format nicht das erforderliche Format ist. Das benötigte Format ist 2015-02-20,
etc.
Jetzt versuche ich herauszufinden, wie numpy die 'amerikanischen' Daten in den ISO-Standard konvertieren kann, damit ich sie zu Datumsobjekten machen und nach ihnen sortieren kann.
Wie würde ich diese amerikanischen Daten in ISO-Standards umwandeln, oder gibt es eine einfachere Methode, die mir bei Pandas fehlt?
df.Date.astype(np.int64)
sollte für die Epochenzeit funktionierenpd.to_datetime(df.Date)[0]
kehrt zurückTimestamp('2015-02-20 00:00:00')
sort
Methode wurde veraltet und ersetzt durchsort_values
. Nach der Konvertierung in datetime Objekt mitdf['Date']=pd.to_datetime(df['Date'])
df.sort_values(by=['Date'])
Hinweis: Zum Sortieren an Ort und Stelle und / oder in absteigender Reihenfolge (die letzte zuerst):
df.sort_values(by=['Date'], inplace=True, ascending=False)
quelle
Die Antwort von @ JAB ist schnell und präzise. Aber es ändert das
DataFrame
, was Sie sortieren möchten, was Sie vielleicht wollen oder nicht.( Hinweis : Sie mit ziemlicher Sicherheit wird es wollen, weil Ihre Datumsspalten Daten sein sollte, keine Strings!)
In dem unwahrscheinlichen Fall, dass Sie die Daten nicht in Daten ändern möchten, können Sie dies auch auf andere Weise tun.
Holen Sie sich zuerst den Index aus Ihrer sortierten
Date
Spalte:In [25]: pd.to_datetime(df.Date).order().index Out[25]: Int64Index([0, 2, 1], dtype='int64')
Verwenden Sie es dann, um Ihr Original zu indizieren
DataFrame
und es unberührt zu lassen: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
Magie!
Hinweis: Verwenden Sie für Pandas-Versionen 0.20.0 und höher
loc
anstelle vonix
, was jetzt veraltet ist.quelle
Die Daten, die die Datumsspalte enthalten, können mit dem folgenden Code gelesen werden:
Sobald die Daten mithilfe der obigen Codezeile gelesen wurden, kann auf die Spalte mit den Informationen zum Datum
pd.date_time()
wie folgt zugegriffen werden :pd.date_time(data[date_column], format = '%d/%m/%y')
um das Format des Datums gemäß der Anforderung zu ändern.
quelle