Mam następującą ramkę danych pandy:
Symbol Date
A 02/20/2015
A 01/15/2016
A 08/21/2015
Chcę to posortować według Date
, ale kolumna to tylko plik object
.
Próbowałem ustawić kolumnę jako obiekt daty, ale napotkałem problem, w którym ten format nie jest wymagany. Potrzebny format to 2015-02-20,
itp.
Więc teraz próbuję wymyślić, w jaki sposób numpy przekonwertować daty „amerykańskie” na standard ISO, aby móc uczynić z nich obiekty daty, aby móc sortować według nich.
Jak przekonwertować te amerykańskie daty na standard ISO, czy jest bardziej prosta metoda, której brakuje mi w pandach?
df.Date.astype(np.int64)
powinno działać dla epokipd.to_datetime(df.Date)[0]
wracaTimestamp('2015-02-20 00:00:00')
sort
metoda została wycofana i zastąpiona przezsort_values
. Po konwersji do obiektu datetime przy użyciudf['Date']=pd.to_datetime(df['Date'])
df.sort_values(by=['Date'])
Uwaga: aby posortować na miejscu i / lub w porządku malejącym (od najnowszych):
df.sort_values(by=['Date'], inplace=True, ascending=False)
źródło
Odpowiedź @ JAB jest szybka i zwięzła. Ale zmienia to,
DataFrame
co próbujesz posortować, co możesz chcieć lub nie.( Uwaga : prawie na pewno będziesz tego chciał, ponieważ kolumny z datami powinny być datami, a nie ciągami!)
W mało prawdopodobnym przypadku, gdy nie chcesz zmieniać dat na daty, możesz to również zrobić w inny sposób.
Najpierw pobierz indeks z posortowanej
Date
kolumny:In [25]: pd.to_datetime(df.Date).order().index Out[25]: Int64Index([0, 2, 1], dtype='int64')
Następnie użyj go do zindeksowania oryginału
DataFrame
, pozostawiając go nietkniętym: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
Magia!
Uwaga: w przypadku Pand w wersji 0.20.0 i nowszych użyj
loc
zamiastix
, które jest teraz przestarzałe.źródło
Dane zawierające kolumnę daty można odczytać korzystając z poniższego kodu:
Po odczytaniu danych za pomocą powyższego wiersza kodu, do kolumny zawierającej informacje o dacie można uzyskać dostęp za pomocą
pd.date_time()
:pd.date_time(data[date_column], format = '%d/%m/%y')
zmienić format daty zgodnie z wymaganiami.
źródło