Saya menggunakan pandas.to_datetime
untuk menguraikan tanggal dalam data saya. Panda secara default mewakili tanggal dengan datetime64[ns]
meskipun tanggal semua hanya harian. Saya bertanya-tanya apakah ada cara yang elegan / pintar untuk mengubah tanggal menjadi datetime.date
atau datetime64[D]
sehingga, ketika saya menulis data ke CSV, tanggal tidak ditambahkan 00:00:00
. Saya tahu saya bisa mengonversi tipe secara manual elemen demi elemen:
[dt.to_datetime().date() for dt in df.dates]
Tapi ini sangat lambat karena saya memiliki banyak baris dan itu semacam mengalahkan tujuan penggunaan pandas.to_datetime
. Apakah ada cara untuk mengonversi dtype
seluruh kolom sekaligus? Atau sebagai alternatif, apakah pandas.to_datetime
mendukung spesifikasi presisi sehingga saya dapat menghilangkan bagian waktu saat bekerja dengan data harian?
df.dates.apply(lambda x: x.date())
harus setidaknya sedikit lebih cepat. lihat juga github.com/pydata/pandas/issues/2583Jawaban:
Karena versi
0.15.0
ini sekarang dapat dengan mudah dilakukan menggunakan.dt
untuk mengakses hanya komponen tanggal:Di atas mengembalikan
datetime.date
dtype, jika Anda ingin memilikidatetime64
maka Anda dapat hanyanormalize
komponen waktu hingga tengah malam sehingga menetapkan semua nilai menjadi00:00:00
:Ini membuat dtype sebagai
datetime64
tetapi layar hanya menunjukkandate
nilai.sumber
Solusi sederhana:
sumber
Sementara saya meningkatkan jawaban EdChum, yang merupakan jawaban paling langsung untuk pertanyaan yang diajukan OP, itu tidak benar-benar menyelesaikan masalah kinerja (masih bergantung pada
datetime
objek python , dan karenanya setiap operasi pada mereka tidak akan di vectorisasi - yaitu, itu akan lambat).Alternatif berkinerja lebih baik adalah menggunakan
df['dates'].dt.floor('d')
. Sebenarnya, itu tidak "tetap hanya bagian tanggal", karena hanya mengatur waktu00:00:00
. Tapi itu berfungsi seperti yang diinginkan oleh OP ketika, misalnya:groupby
... dan itu jauh lebih efisien, karena operasi ini vektor.
EDIT: pada kenyataannya, jawaban OP lebih suka mungkin "versi terbaru dari
pandas
yang tidak menulis waktu untuk csv jika00:00:00
untuk semua pengamatan".sumber
to_json
masih menulis penuh00:00:00
.date_format='iso'
?! Secara default, ini hanya menghasilkan detik sejak zaman.dt.normalize()
seri lebih lama dari beberapa ratus elemen.Panda
DatetimeIndex
danSeries
memiliki metode yang disebutnormalize
yang melakukan apa yang Anda inginkan.Anda dapat membaca lebih lanjut tentang hal ini di jawaban ini .
Dapat digunakan sebagai
ser.dt.normalize()
sumber
Pandas v0.13 +: Gunakan
to_csv
dengandate_format
parameterHindari, jika mungkin, mengubah
datetime64[ns]
seri Anda menjadiobject
serangkaiandatetime.date
objek dtype . Yang terakhir, sering dibangun menggunakanpd.Series.dt.date
, disimpan sebagai array pointer dan tidak efisien relatif terhadap seri berbasis NumPy murni.Karena kekhawatiran Anda adalah format saat menulis ke CSV , cukup gunakan
date_format
parameterto_csv
. Sebagai contoh:Lihat arahan Python
strftime
untuk memformat konvensi.sumber
Ini adalah cara sederhana untuk mengekstrak tanggal:
sumber
Konversi ke
datetime64[D]
:Meskipun menugaskan ulang itu ke col DataFrame akan mengembalikannya kembali ke [ns].
Jika Anda ingin yang sebenarnya
datetime.date
:sumber
dt
, snipet jawaban ini akan menimpa modul itu! @ Dale-Jung, mungkin dapat mengubah jalur ke sesuatu seperti dt_indexdf.loc[date]
metode ini, indeks kembali ke stempel waktu, yang berarti perbandingan selanjutnya tidak lagi berfungsiHanya memberikan jawaban yang lebih terkini jika seseorang melihat posting lama ini.
Menambahkan "utc = False" saat mengonversi ke datetime akan menghapus komponen zona waktu dan hanya menyimpan tanggal dalam tipe data datetime64 [ns].
Anda akan dapat menyimpannya di excel tanpa mendapatkan kesalahan "ValueError: Excel tidak mendukung datetimes dengan zona waktu. Harap pastikan bahwa datet Zone tidak menyadari zona waktu sebelum menulis ke Excel."
sumber
Saya ingin dapat mengubah jenis kumpulan kolom dalam bingkai data dan kemudian menghapus waktu menjaga hari. round (), floor (), ceil () semuanya berfungsi
sumber