Python: Mengonversi timedelta menjadi int dalam kerangka data


111

Saya ingin membuat kolom dalam bingkai data panda yang merupakan representasi integer dari jumlah hari di kolom timedelta. Apakah mungkin untuk menggunakan 'datetime.days' atau apakah saya perlu melakukan sesuatu yang lebih manual?

kolom timedelta

7 hari, 23:29:00

kolom integer hari

7


12
Sudahkah Anda mencoba menggunakan timedelta.days?
Ffisegydd

Jawaban:


160

Gunakan dt.daysatributnya. Akses atribut ini melalui:

timedelta_series.dt.days

Anda juga bisa mendapatkan atribut secondsdan microsecondsdengan cara yang sama.


11
Saya menyukai komentar ini karena kesederhanaannya dan tidak memerlukan impor perpustakaan lain.
NickBraunagel

67

Anda bisa melakukan ini, di mana tdrangkaian waktu Anda. Pembagian ini mengubah delta nanodetik menjadi delta hari, dan konversi ke int turun menjadi hari penuh.

import numpy as np

(td / np.timedelta64(1, 'D')).astype(int)

1
Terima kasih! Juga setelah 15 menit lebih mencari saya menemukan ini. stackoverflow.com/questions/18215317/…
Asaf Hanish

untuk apa /antara tddan np?
Jason Goal

Ini operator divisi timedelta64. Membagi td dengan delta waktu 1 hari menghasilkan jumlah hari (kemungkinan pecahan) yang direpresentasikan dalam td. Tidak diperlukan dalam kasus ini tetapi sangat berguna jika katakanlah Anda ingin menghitung berapa banyak interval 15 menit yang diwakili
David Waterworth

22

Benda timedelta telah membaca-satunya contoh atribut .days, .secondsdan .microseconds.


6

Jika pertanyaannya bukan hanya "bagaimana cara mengakses bentuk integer dari timedelta?" tapi "bagaimana mengubah kolom timedelta di dataframe menjadi int?" jawabannya mungkin sedikit berbeda. Selain .dt.dayspengakses yang Anda butuhkan df.astypeataupd.to_numeric

Salah satu dari opsi ini akan membantu:

df['tdColumn'] = pd.to_numeric(df['tdColumn'].dt.days, downcast='integer')

atau

df['tdColumn'] = df['tdColumn'].dt.days.astype('int16')

Hai, Saya mencoba ini, tetapi saya mendapat ValueError: Tidak dapat mengubah nilai non-terbatas (NA atau inf) menjadi integer karena ada nans dalam seri panda. Apakah Anda tahu siapa yang harus menyelesaikan masalah ini ???
Pablito

Opsi kedua bekerja untuk saya dan nilai tanggal adalah tipe timedelta64[ns]. Jika tanggal Anda adalah NaN, konversikan dulu ke datetime menggunakan to_datetimefungsi pandas , lalu gunakan opsi kedua di atas. Untuk lebih jelasnya checkout to_datetime
Onen simon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.