Python: แปลง timedelta เป็น int ใน dataframe


111

ฉันต้องการสร้างคอลัมน์ในกรอบข้อมูลแพนด้าที่เป็นตัวแทนจำนวนเต็มของจำนวนวันในคอลัมน์ไทม์เดลตา เป็นไปได้ไหมที่จะใช้ 'datetime.days' หรือฉันต้องทำอะไรเพิ่มเติมด้วยตนเอง?

คอลัมน์เวลา

7 วัน 23:29:00 น

คอลัมน์จำนวนเต็มวัน

7


12
ได้ลองใช้กันtimedelta.daysหรือยัง?
Ffisegydd

คำตอบ:


162

ใช้dt.daysแอตทริบิวต์ เข้าถึงแอตทริบิวต์นี้ผ่าน:

timedelta_series.dt.days

คุณยังสามารถรับsecondsและmicrosecondsแอตทริบิวต์ในลักษณะเดียวกัน


11
ฉันชอบความคิดเห็นนี้สำหรับความเรียบง่ายและไม่ต้องนำเข้าห้องสมุดอื่น
NickBraunagel

68

คุณสามารถทำได้tdชุดเวลาของคุณอยู่ที่ไหน การหารจะแปลงเดลต้านาโนวินาทีเป็นเดลต้าวันและการแปลงเป็น int จะลดลงเป็นทั้งวัน

import numpy as np

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

1
ขอบคุณ! หลังจากค้นหาอีก 15 นาทีฉันก็พบสิ่งนี้ stackoverflow.com/questions/18215317/…
Asaf Hanish

สิ่งที่เป็น/ระหว่างtdและnp?
Jason Goal

เป็นตัวดำเนินการแบ่ง timedelta64 การหาร td ด้วยเดลต้าเวลา 1 วันเป็นผลลัพธ์ในจำนวนวัน (อาจเป็นเศษส่วน) ที่แสดงใน td ไม่จำเป็นต้องใช้ในกรณีนี้ แต่จะมีประโยชน์มากหากบอกว่าคุณต้องการ
David Waterworth


6

หากคำถามไม่ใช่แค่ "วิธีเข้าถึงรูปแบบจำนวนเต็มของไทม์เดลตา" แต่ "จะแปลงคอลัมน์ timedelta ใน dataframe เป็น int ได้อย่างไร" คำตอบอาจแตกต่างกันเล็กน้อย นอกจาก.dt.daysอุปกรณ์ที่คุณต้องการdf.astypeหรือpd.to_numeric

ตัวเลือกเหล่านี้ควรช่วย:

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

หรือ

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

สวัสดีฉันลองสิ่งนี้แล้ว แต่ฉันได้รับ ValueError: ไม่สามารถแปลงค่าที่ไม่ จำกัด (NA หรือ inf) เป็นจำนวนเต็มได้เนื่องจากมี nans ในชุดแพนด้า คุณรู้หรือไม่ว่าใครเป็นผู้จัดเรียง ???
Pablito

timedelta64[ns]ตัวเลือกที่สองทำงานสำหรับฉันและค่าวันที่เป็นประเภท หากวันที่ของคุณเป็น NaN ก่อนอื่นให้แปลงเป็นวันที่และเวลาโดยใช้to_datetimeฟังก์ชันแพนด้าจากนั้นใช้ตัวเลือกที่สองด้านบน สำหรับรายละเอียดเพิ่มเติม checkout to_datetime
Onen simon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.