从timedelta中提取时间

时间:2018-04-15 20:32:59

标签: python timedelta

我有一个清单:

[Timedelta('0 days 00:02:39.210526'),
 Timedelta('0 days 00:03:29.033333'),
 Timedelta('0 days 00:03:36.333333'),
 Timedelta('0 days 00:01:04'),
 Timedelta('0 days 00:04:05.571428'),
 Timedelta('0 days 00:04:00.500000'),
 Timedelta('0 days 00:03:54.583333')]

如何从此列表中仅提取时间?

2 个答案:

答案 0 :(得分:1)

假设您正在使用datetime模块并且您的Timedeltas列表被称为my_timedelta_list,您可以执行以下操作以获得以秒为单位的时差:

my_times = []
for t in my_timedelta_list:
    my_times.append(t.total_seconds())

然后你的my_times变量会有几秒钟的时差。

然后,您可以将秒转换为您想要的任何时间单位和格式。

答案 1 :(得分:0)

我假设您要将时间组件提取为字符串,即使您的Timedelta大于1天,也要删除对“天”的所有引用。

一种方法是将Timedelta转换为规范化datetime,然后使用time属性。

以下是将Timedelta对象转换为字符串的简单方法。

请注意,这会使用第三方库pandas

import pandas as pd

lst = [pd.Timedelta('0 days 00:02:39.210526'),
       pd.Timedelta('1 days 00:03:29.033333'),
       pd.Timedelta('5 days 00:03:36.333333'),
       pd.Timedelta('2 days 00:01:04'),
       pd.Timedelta('10 days 00:04:05.571428'),
       pd.Timedelta('8 days 00:04:00.500000'),
       pd.Timedelta('1 days 00:03:54.583333')]

df = pd.DataFrame({'A': lst})

df['B'] = (pd.Timestamp('now').normalize() + df['A']).dt.time
df['C'] = df['A'].astype(str)

print(df)

                        A                B                           C
0  0 days 00:02:39.210526  00:02:39.210526   0 days 00:02:39.210526000
1  1 days 00:03:29.033333  00:03:29.033333   1 days 00:03:29.033333000
2  5 days 00:03:36.333333  00:03:36.333333   5 days 00:03:36.333333000
3         2 days 00:01:04         00:01:04   2 days 00:01:04.000000000
4 10 days 00:04:05.571428  00:04:05.571428  10 days 00:04:05.571428000
5  8 days 00:04:00.500000  00:04:00.500000   8 days 00:04:00.500000000
6  1 days 00:03:54.583333  00:03:54.583333   1 days 00:03:54.583333000

print(df.dtypes)

A    timedelta64[ns]
B             object
C             object
dtype: object