Mam ramkę danych pandy z następującymi kolumnami;
Date Time
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Jak połączyć dane [„Data”] i [„Czas”], aby uzyskać następujące informacje? Czy można to zrobić za pomocą pd.to_datetime
?
Date
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Odpowiedzi:
Warto wspomnieć, że być może byłeś w stanie przeczytać to bezpośrednio, np. Jeśli
read_csv
używałeśparse_dates=[['Date', 'Time']]
.Zakładając, że są to tylko ciągi znaków, możesz po prostu dodać je razem (ze spacją), umożliwiając zastosowanie
to_datetime
:Uwaga: zaskakująco (dla mnie) działa to dobrze w przypadku konwersji NaN na NaT, ale warto się martwić, że konwersja (być może przy użyciu
raise
argumentu).źródło
parse_dates=[['Start date', 'Start time'], ['End date', 'End time']])
. Pandy <3Zaakceptowana odpowiedź działa w przypadku kolumn typu danych
string
. Dla kompletności: natknąłem się na to pytanie, szukając, jak to zrobić, gdy kolumny mają typy danych: datę i godzinę.źródło
time
w pandach. Mam raczej atimedelta
(idatetime
) w takim przypadku wystarczy je dodać, zobacz moją odpowiedźpd.datetime
jest przestarzałe i sugeruje się, abydatetime
zamiast tego jawnie zaimportować moduł.Możesz użyć tego do scalenia daty i godziny w tej samej kolumnie Dataframe.
Czytanie pliku .csv z połączonymi kolumnami Date_Time:
Możesz użyć tej linii, aby zachować również obie inne kolumny.
źródło
date_parser
, na przykładparser = lambda date: pd.datetime.strptime(date, '%d-%b-%y %H:%M:%S')
Możesz rzutować kolumny, jeśli typy są różne (datetime i timestamp lub str) i użyć to_datetime:
Wynik:
Najlepsza,
źródło
Nie mam wystarczającej reputacji, aby komentować jka.ne, więc:
Musiałem poprawić wiersz jka.ne, aby działał:
To może pomóc innym.
Przetestowałem też inne podejście, używając
replace
zamiastcombine
:co w przypadku PO byłoby:
Ustawiłem czas dla obu podejść dla stosunkowo dużego zbioru danych (> 500 000 wierszy) i oba mają podobne środowiska uruchomieniowe, ale użycie
combine
jest szybsze (59s dlareplace
vs 50s dlacombine
).źródło
Odpowiedź naprawdę zależy od typów twoich kolumn . W moim przypadku miałem
datetime
itimedelta
.Jeśli tak jest w Twoim przypadku, wystarczy dodać kolumny:
źródło
datetime
itimedelta
. Główna odpowiedź w jakiś sposób wskazuje, że kolumny były łańcuchami, a może to była po prostu odpowiedź, która zadziałała w przypadku tego, który opublikował pytanie.Możesz również przekonwertować na
datetime
bez konkatenacji ciągów, łączącdatetime
itimedelta
obiekty. W połączeniu zpd.DataFrame.pop
możesz jednocześnie usunąć serię źródłową:źródło
Najpierw upewnij się, że masz odpowiednie typy danych:
Następnie łatwo je łączysz:
źródło
Użyj
combine
funkcji:źródło
Mój zestaw danych zawierał dane o rozdzielczości 1 sekundy przez kilka dni i analizowanie sugerowanymi tu metodami było bardzo wolne. Zamiast tego użyłem:
Zwróć uwagę, że użycie funkcji
cache=True
sprawia, że analizowanie dat jest bardzo wydajne, ponieważ w moich plikach jest tylko kilka unikalnych dat, co nie jest prawdą dla połączonej kolumny daty i godziny.źródło
DANE:
<TICKER>, <PER>, <DATE>, <TIME> , <OPEN>, <HIGH>, <LOW>, <CLOSE>, <VOL> SPFB.RTS, 1, 20190103,100100 , 106580.0000000,107260.0000000,106570.0000000 , 107230,0000000, 3726
KOD:
źródło