Нерегулярный временной ряд data сохраняется в pandas.DataFrame. DatetimeIndex был установлен. Мне нужна разница во времени между последовательными записями в индексе.

Я думал, это будет так просто, как

data.index.diff()

Но получил

AttributeError: 'DatetimeIndex' object has no attribute 'diff'

Я старался

data.index - data.index.shift(1)

Но получил

ValueError: Cannot shift with no freq

Я не хочу определять или применять частоту перед выполнением этой операции. Во временных рядах имеются большие промежутки, которые будут расширены до больших серий nan. Дело в том, чтобы найти эти пробелы в первую очередь.

Итак, что такое чистый способ сделать эту, казалось бы, простую операцию?

15
clstaudt 14 Мар 2018 в 15:34

2 ответа

Лучший ответ

Еще не реализована функция diff для индекса.

Но можно сначала преобразовать индекс в Series с помощью Index.to_series, если нужен исходный индекс или Series конструктор без параметра индекса, если нужны значения индекса по умолчанию:

rng = pd.to_datetime(['2015-01-10','2015-01-12','2015-01-13'])
data = pd.DataFrame({'a': range(3)}, index=rng)  
print (data)
            a
2015-01-10  0
2015-01-12  1
2015-01-13  2

a = data.index.to_series().diff()
print (a)
2015-01-10      NaT
2015-01-12   2 days
2015-01-13   1 days
dtype: timedelta64[ns]

a = pd.Series(data.index).diff()
print (a)
0      NaT
1   2 days
2   1 days
dtype: timedelta64[ns]
10
jezrael 14 Мар 2018 в 12:41

Этот вопрос немного старый, но все равно ...

Я использую numpy.diff(data.index), чтобы получить дельты времени. Работает нормально.

1
Abhishek Gurjar 6 Июн 2019 в 07:50