Moja ramka danych ma DOB
kolumnę (przykładowy format 1/1/2016
), która jest domyślnie konwertowana na pandas dtype 'object':DOB object
Konwersja to format daty df['DOB'] = pd.to_datetime(df['DOB'])
, data zostanie przekonwertowany do: 2016-01-26
a jej dtype
brzmi: DOB datetime64[ns]
.
Teraz chcę przekonwertować ten format daty na 01/26/2016
lub w inne ogólne formaty daty. Jak mam to zrobić?
Niezależnie od metody, którą wypróbuję, zawsze pokazuje datę w 2016-01-26
formacie.
Odpowiedzi:
Możesz użyć,
dt.strftime
jeśli chcesz przekonwertowaćdatetime
na inne formaty (ale pamiętaj, że wtedydtype
kolumna będzieobject
(string
)):źródło
.merge
kolumny datetime innej ramki danych? Czy ma sens konwertowanie drugiej kolumny daty i godziny na kolumnę obiektu, aby wykonać.merge
?.merge
nadal można to zrobić poprawnie, jeśli obie kolumny są kolumnami czasu danych, nawet jeśli nie mają dokładnie tego samego formatu. Czy to jest poprawne?Zmiana formatu, ale bez zmiany typu:
źródło
date
kolumnie to „ 26 listopada 2019 r.”.strftime()
oznacza „ciąg od czasu” , więcdf["date"].dt.strftime('%Y-%m')
będzie ciągiem"2019-11"
dla tego elementu. Następniepd.to_datetime()
przekonwertuje ten ciąg z powrotem dodatetime64
formatu, ale teraz jako „ 1 listopada 2019”! Wynik będzie więc: Bez zmiany formatu, ale zmiana samej wartości daty!Poniższy kod zadziałał dla mnie zamiast poprzedniego - wypróbuj!
źródło
format='%m/%d/%Y'
parametr służy do parsowania napisu, tzn. Powinieneś dostarczyć napis w takim formacie (np"5/13/2019"
.). Nic więcej, bez zmiany formatu. Nadal będzie wyświetlany jako2019-05-13
- lub zgłosi wyjątek, jeślidf['DOB'].astype(str)
zawiera element (y) nie w takim formacie, np. W formacie"2019-05-13"
.W porównaniu z pierwszą odpowiedzią zalecam najpierw użycie dt.strftime (), a następnie pd.to_datetime (). W ten sposób nadal będzie skutkował typem danych datetime.
Na przykład,
źródło
Jest różnica między
Pytanie brzmi: jak dojść do odpowiedniej prezentacji moich danych bez zmiany samych danych / typów danych?
Oto odpowiedź:
id
iclass
atrybutami do dalszego stylowania CSS - możesz ich użyć lub nie),użyj stylizacji .Styl nie zmienia danych / typów danych kolumn ramki danych.
Teraz pokażę Ci, jak dotrzeć do tego w notatniku Jupyter - aby zapoznać się z prezentacją w postaci pliku HTML, zobacz notatkę pod koniec pytania.
Przypuszczam, że twoja kolumna
DOB
ma już typdatetime64
(pokazałeś, że wiesz, jak do niego dotrzeć). Przygotowałem prostą ramkę danych (z tylko jedną kolumną), aby pokazać podstawowe style:Nie stylizowany:
Stylizacja jako
mm/dd/yyyy
:Stylizacja jako
dd-mm-yyyy
:Bądź ostrożny!
Zwracający obiekt NIE jest ramką danych - jest to obiekt klasy
Styler
, więc nie przypisuj go z powrotem dodf
:Nie rób tego:
(Każda ramka danych ma swój obiekt Styler dostępny przez swoją
.style
właściwość i zmieniliśmy tendf.style
obiekt, a nie samą ramkę danych).Pytania i odpowiedzi:
P: Dlaczego twój obiekt Styler (lub wyrażenie zwracające go) użyty jako ostatnie polecenie w komórce notatnika Jupyter wyświetla twoją (ze stylem) tabelę , a nie sam obiekt Styler?
Odp .: Ponieważ każdy obiekt Styler ma metodę wywołania zwrotnego,
._repr_html_()
która zwraca kod HTML do renderowania ramki danych (jako ładnej tabeli HTML).Jupyter Notebook IDE wywołuje tę metodę automatycznie, aby renderować obiekty, które ją zawierają.
Uwaga:
Nie potrzebujesz notatnika Jupyter do stylizacji (tj. Do ładnego drukowania ramki danych bez zmiany jej typów danych / danych ).
Obiekt Styler ma również metodę
render()
, jeśli chcesz uzyskać ciąg znaków z kodem HTML (np. Do opublikowania sformatowanej ramki danych w Internecie lub po prostu zaprezentuj swoją tabelę w formacie HTML):źródło
if
instrukcji warunkowej tak znanej każdemu programiście? - Mimo to dziękuję za komentarz, dla niektórych może być pomocny.pd.to_datetime()
ma argumentyerrors='raise'/'coerce'/'ignore', dayfirst, yearfirst, utc, exact
, aby kontrolować sposób precyzyjny i wyjątków zadowolony to jest i czy nieprawidłowe wyjścia uzyskać zmuszony doNaT
lub co. To, co sprawia, że jest to bardziej skomplikowane w „rzeczywistych” zbiorach danych, to mieszane / brakujące / niekompletne formaty, godziny, strefy czasowe itp .; wyjątki niekoniecznie są złymi rzeczami.Poniższy kod zmienia się na typ „datetime”, a także formatuje w podanym ciągu formatu. Działa dobrze!
źródło
df['DOB']=pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%Y')
Możesz spróbować tego, aby przekonwertować format daty na DD-MM-RRRR:
źródło
dayfirst=True
to tylko specyfikacja kolejności przetwarzania dat, np. ten niejednoznaczny ciąg daty jako „2-1-2019” zostanie przeanalizowany jako 2 stycznia 2019 r., a nie jako 1 lutego 2019 r. Nic więcej, bez zmian w formatowaniu danych wyjściowych .