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

Asaf Hanish
sumber
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.

abeboparebop
sumber
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)
chrisb
sumber
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.

Qiao Zhang
sumber
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')
MurahSquier
sumber
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