Pandas и DateTime TypeError: невозможно сравнить TimedeltaIndex с типом float - PullRequest
0 голосов
/ 23 октября 2018

У меня есть разница во времени для серии 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 голосов
/ 23 октября 2018

Вы можете использовать класс 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 минут.

0 голосов
/ 23 октября 2018

Предполагая, что ваша серия в формате 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]
...