Excel [h]:到Pandas时间增量的持续时间(mm)

gojuced7  于 2022-12-21  发布在  其他
关注(0)|答案(1)|浏览(97)

我正在从Excel工作表导入数据,其中有一个“持续时间”字段显示为[h]:mm(以便显示总小时数)。我理解,在下面,这只是作为浮点数的天数。
我想在Pandas Dataframe 中将其作为timedelta列或类似列使用,但无论我做什么,它都会删除超过24小时的任何小时(例如,天部分)。
Excel数据(突出显示超过24小时):

Pandas进口(1天7小时51分钟):

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',即使使用strobject,Python仍然认为列i是datetime.time
理想情况下,我不想在中间步骤中更改Excel源数据或导出为.csv。

xoefb8l8

xoefb8l81#

如果我没记错的话,导入的对象是datetimetime,日期时间为儒略历。
因此,您必须使用自定义函数进行转换:

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
...

相关问题