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,但是时间增量本身并不表示任何特定的时间点。你问的是“三分钟是几点?”如果没有参考资料,那就毫无意义了,即“三分钟后什么时候?”