Python 从timedelta中提取时间

Python 从timedelta中提取时间,python,timedelta,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

我有一份清单:

[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')]

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

假设您使用的是
datetime
模块,并且您的
timedelta
列表被称为
my\u timedelta\u list
,您可以执行以下操作以秒为单位获取时差:

my_times = []
for t in my_timedelta_list:
    my_times.append(t.total_seconds())
然后您的
my_times
变量将具有以秒为单位的时间差


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

假设您使用的是
datetime
模块,并且
timedelta
列表被称为
my\u timedelta\u list
,您可以执行以下操作以秒为单位获取时差:

my_times = []
for t in my_timedelta_list:
    my_times.append(t.total_seconds())
然后您的
my_times
变量将具有以秒为单位的时间差


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

我假设您希望将时间组件提取为字符串,删除对“天”的所有引用,即使
时间增量大于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

我假设您希望将时间组件提取为字符串,删除对“天”的所有引用,即使
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

我犯错误你没有。时间增量不是时间。它们是时间的长度。如果您有一个datetime,并且添加/减去一个时间增量,您将获得一个新的datetime,但是时间增量本身并不表示任何特定的时间点。你问的是“三分钟是几点?”如果没有参考资料,那就没有任何意义了。。。犯错误你没有。时间增量不是时间。它们是时间的长度。如果您有一个datetime,并且添加/减去一个时间增量,您将获得一个新的datetime,但是时间增量本身并不表示任何特定的时间点。你问的是“三分钟是几点?”如果没有参考资料,那就毫无意义了,即“三分钟后什么时候?”