[英]Display pandas timedelta in HH:MM:SS format by converting days to hours
[英]Excel [h]:mm duration to pandas timedelta
我正在從 Excel 工作表導入數據,其中有一個“持續時間”字段顯示在 [h]:mm 中(以便顯示總小時數)。 我知道在下面,這只是浮動的天數。
我想將其用作 Pandas 數據框中的timedelta
列或類似列,但無論我做什么,它都會減少超過 24 小時(例如天數部分)。
Excel 數據(突出顯示超過 24 小時):
熊貓進口(1d 7h 51m):
BATCH_NO Duration
354 7154 04:36:00
465 7270 06:35:00
466 7271 08:05:00
467 7272 05:54:00
468 7273 09:10:00
472 7277 06:15:00
476 7280 10:23:00
477 7284 06:09:00
499 7313 06:46:00
503 7322 05:27:00
510 7333 14:15:00
515 7335 1900-01-01 07:51:00
516 7338 07:51:00
517 7339 09:00:00
518 7339 05:29:00
519 7339 09:00:00
520 7339 05:29:00
522 7342 12:10:00
525 7343 08:00:00
530 7346 08:25:00
運行to_datetime
轉換只是刪除列的日期(整數)部分:
BATCH_NO Duration
354 7154 04:36:00
465 7270 06:35:00
466 7271 08:05:00
467 7272 05:54:00
468 7273 09:10:00
472 7277 06:15:00
476 7280 10:23:00
477 7284 06:09:00
499 7313 06:46:00
503 7322 05:27:00
510 7333 14:15:00
515 7335 07:51:00
516 7338 07:51:00
517 7339 09:00:00
518 7339 05:29:00
519 7339 09:00:00
520 7339 05:29:00
522 7342 12:10:00
525 7343 08:00:00
530 7346 08:25:00
我嘗試通過將 dtype 固定為float
來導入,但只有str
或object
工作 - dtype={'Duration': str}
工作。
float
給出錯誤float() argument must be a string or a number, not 'datetime.time'
and even with str
or object
,Python 仍然認為列 ia datetime.time
理想情況下,我不想在中間步驟中更改 Excel 源數據或導出到 .csv。
如果我沒記錯的話,導入的對象是datetime
time
和帶有儒略歷日期時間的時間。
因此,您必須使用自定義函數進行轉換:
from datetime import datetime, time, timedelta
def convert(t):
if isinstance(t, time):
t = datetime.combine(datetime.min, t)
delta = t-datetime.min
if delta.days != 0:
delta -= timedelta(days=693594)
return delta
df['Duration'].apply(convert)
輸出:
0 0 days 04:36:00
1 0 days 06:35:00
2 0 days 08:05:00
3 0 days 05:54:00
4 0 days 09:10:00
5 0 days 06:15:00
6 0 days 10:23:00
7 0 days 06:09:00
8 0 days 06:46:00
9 0 days 05:27:00
10 0 days 14:15:00
11 1 days 07:51:00 # corrected
12 0 days 07:51:00
13 0 days 09:00:00
14 0 days 05:29:00
15 0 days 09:00:00
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.