簡體   English   中英

Excel [h]:mm 持續時間到 pandas timedelta

[英]Excel [h]:mm duration to pandas timedelta

我正在從 Excel 工作表導入數據,其中有一個“持續時間”字段顯示在 [h]:mm 中(以便顯示總小時數)。 我知道在下面,這只是浮動的天數。

我想將其用作 Pandas 數據框中的timedelta列或類似列,但無論我做什么,它都會減少超過 24 小時(例如天數部分)。

Excel 數據(突出顯示超過 24 小時):

持續時間超過24小時的Excel數據

熊貓進口(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來導入,但只有strobject工作 - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM