Dataframe saya memiliki DOB
kolom (format contoh 1/1/2016
) yang secara default diubah menjadi 'object' pandas dtype:DOB object
Konversi ini untuk format tanggal dengan df['DOB'] = pd.to_datetime(df['DOB'])
, tanggal akan dikonversi menjadi: 2016-01-26
dan yang dtype
adalah: DOB datetime64[ns]
.
Sekarang saya ingin mengubah format tanggal ini ke 01/26/2016
atau dalam format tanggal umum lainnya. Bagaimana saya melakukannya?
Apapun metode yang saya coba, selalu menunjukkan tanggal dalam 2016-01-26
format.
Jawaban:
Anda dapat menggunakan
dt.strftime
jika Anda perlu mengonversidatetime
ke format lain (tetapi perhatikan bahwadtype
kolom akan menjadiobject
(string
)):sumber
.merge
pada tanggal waktu dari kerangka data lain? Apakah masuk akal untuk mengonversi kolom datetime lainnya ke kolom objek untuk melakukan.merge
?.merge
masih bisa dilakukan dengan benar jika kedua kolom tersebut adalah kolom datetimes meskipun tidak memiliki format yang sama persis. Apakah ini benar?Mengubah format tetapi tidak mengubah jenis:
sumber
date
kolom adalah “ 26 November 2019”.strftime()
berarti "string dari waktu" , jadidf["date"].dt.strftime('%Y-%m')
akan menjadi string"2019-11"
untuk item itu. Kemudian,pd.to_datetime()
akan mengonversi string ini kembali kedatetime64
format, tetapi sekarang menjadi " 1 November 2019"! Hasilnya adalah: Tidak ada perubahan format, tapi perubahan nilai tanggal itu sendiri!Kode di bawah ini berfungsi untuk saya daripada yang sebelumnya - cobalah!
sumber
format='%m/%d/%Y'
Parameter Anda adalah untuk mem - parsing string, yaitu Anda diharapkan menyediakan string dalam format seperti itu (misalnya"5/13/2019"
). Tidak lebih, tidak ada perubahan format. Ini akan tetap ditampilkan sebagai2019-05-13
- atau akan memunculkan pengecualian, jikadf['DOB'].astype(str)
berisi item tidak dalam format seperti itu, misalnya dalam format"2019-05-13"
.Dibandingkan dengan jawaban pertama, saya akan merekomendasikan untuk menggunakan dt.strftime () terlebih dahulu, lalu pd.to_datetime (). Dengan cara ini, ini masih akan menghasilkan tipe data datetime.
Sebagai contoh,
sumber
Ada perbedaan antara
Jadi pertanyaannya adalah: Bagaimana cara mencapai presentasi yang sesuai dari data saya tanpa mengubah data / tipe datanya sendiri?
Inilah jawabannya:
id
dan berlebihan yang disiapkanclass
untuk gaya CSS lebih lanjut - Anda mungkin atau tidak dapat menggunakannya),gunakan gaya . Styling tidak mengubah data / tipe data kolom dari dataframe Anda.
Sekarang saya tunjukkan cara menjangkaunya di notebook Jupyter - untuk presentasi dalam bentuk file HTML lihat catatan di dekat akhir pertanyaan.
Saya anggap kolom Anda
DOB
sudah memiliki tipedatetime64
(Anda telah menunjukkan bahwa Anda tahu cara mencapainya). Saya menyiapkan kerangka data sederhana (dengan hanya satu kolom) untuk menunjukkan beberapa gaya dasar:Tidak bergaya:
Styling itu sebagai
mm/dd/yyyy
:Styling itu sebagai
dd-mm-yyyy
:Hati-hati!
Objek yang dikembalikan BUKAN kerangka data - ini adalah objek kelas
Styler
, jadi jangan tetapkan kembali kedf
:Jangan lakukan ini:
(Setiap kerangka data memiliki objek Styler yang dapat diakses oleh
.style
propertinya, dan kami mengubahdf.style
objek ini , bukan kerangka data itu sendiri.)Pertanyaan dan jawaban:
T: Mengapa objek Styler Anda (atau ekspresi yang mengembalikannya) digunakan sebagai perintah terakhir di sel notebook Jupyter menampilkan tabel (bergaya) Anda , dan bukan objek Styler itu sendiri?
J: Karena setiap objek Styler memiliki metode callback
._repr_html_()
yang mengembalikan kode HTML untuk merender dataframe Anda (sebagai tabel HTML yang bagus).Jupyter Notebook IDE memanggil metode ini secara otomatis untuk merender objek yang memilikinya.
catatan:
Anda tidak memerlukan notebook Jupyter untuk penggayaan (yaitu untuk menghasilkan dataframe yang bagus tanpa mengubah tipe data / datanya ).
Objek Styler juga memiliki metode
render()
, jika Anda ingin mendapatkan string dengan kode HTML (misalnya untuk menerbitkan kerangka data Anda yang telah diformat ke Web, atau cukup menyajikan tabel Anda dalam format HTML):sumber
if
, pernyataan yang begitu dikenal oleh setiap programmer? - Terlepas dari itu terima kasih atas komentar Anda, mungkin berguna bagi sebagian orang.pd.to_datetime()
memiliki argumenerrors='raise'/'coerce'/'ignore', dayfirst, yearfirst, utc, exact
untuk mengontrol seberapa tepat dan pengecualian-senang itu, dan apakah keluaran yang tidak valid dipaksakanNaT
atau apa. Apa yang membuatnya lebih rumit dalam kumpulan data "dunia nyata" adalah format campuran / hilang / tidak lengkap, waktu, zona waktu, dll; pengecualian tidak selalu berarti buruk.Kode di bawah ini berubah menjadi tipe 'datetime' dan juga format dalam string format yang diberikan. Bekerja dengan baik!
sumber
df['DOB']=pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%Y')
Anda dapat mencobanya, ini akan mengubah format tanggal menjadi DD-MM-YYYY:
sumber
dayfirst=True
hanya spesifikasi urutan penguraian tanggal, misalnya string tanggal ambivalen sebagai "2-1-2019" akan diuraikan sebagai 2 Januari 2019, dan bukan sebagai 1 Februari 2019. Tidak lebih, tidak ada perubahan untuk pemformatan keluaran .