熊猫和DateTime TypeError:无法将TimedeltaIndex与float类型进行比较

时间:2018-10-23 01:01:14

标签: python pandas datetime series

我有一个熊猫DataFrame系列时差,看起来像:

 print(delta_t)

 1       0 days 00:00:59
 3       0 days 00:04:22
 6       0 days 00:00:56
 8       0 days 00:01:21
 19      0 days 00:01:09
 22      0 days 00:00:36
 ...

(完整的DataFrame包含一堆我丢弃的NaN)。

我想知道哪个delta_t小于1天1小时1分钟, 所以我尝试了:

delta_t_lt1day = delta_t[np.where(delta_t < 30.)]

但是得到一个:

TypeError: cannot compare a TimedeltaIndex with type float

没有什么帮助?!?!

2 个答案:

答案 0 :(得分:3)

假设您的系列采用timedelta格式,则可以跳过np.where,并使用类似以下内容的索引,在其中使用适当的单位将实际值与其他时间增量进行比较:

delta_t_lt1day = delta_t[delta_t < pd.Timedelta(1,'D')]

delta_t_lt1hour = delta_t[delta_t < pd.Timedelta(1,'h')]

delta_t_lt1minute = delta_t[delta_t < pd.Timedelta(1,'m')]

您将获得以下系列:

>>> delta_t_lt1day
0
1    00:00:59
3    00:04:22
6    00:00:56
8    00:01:21
19   00:01:09
22   00:00:36
Name: 1, dtype: timedelta64[ns]
>>> delta_t_lt1hour
0
1    00:00:59
3    00:04:22
6    00:00:56
8    00:01:21
19   00:01:09
22   00:00:36
Name: 1, dtype: timedelta64[ns]
>>> delta_t_lt1minute
0
1    00:00:59
6    00:00:56
22   00:00:36
Name: 1, dtype: timedelta64[ns]

答案 1 :(得分:1)

您可以使用TimeDelta类:

import pandas as pd

deltas = pd.to_timedelta(['0 days 00:00:59',
                          '0 days 00:04:22',
                          '0 days 00:00:56',
                          '0 days 00:01:21',
                          '0 days 00:01:09',
                          '0 days 00:31:09',
                          '0 days 00:00:36'])

for e in deltas[deltas < pd.Timedelta(value=30, unit='m')]:
    print(e)

输出

0 days 00:00:59
0 days 00:04:22
0 days 00:00:56
0 days 00:01:21
0 days 00:01:09
0 days 00:00:36

请注意,此过滤器会按预期淘汰'0 days 00:31:09'。表达式pd.Timedelta(value=30, unit='m')创建30分钟的时间增量。