Интерполяция и регуляризация временных рядов Python pandas

Я использую Python Pandas в первый раз. У меня есть 5-минутные данные трафика задержки в формате csv:

... 2015-01-04 08:29:05,271238 2015-01-04 08:34:05,329285 2015-01-04 08:39:05,-1 2015-01-04 08:44:05,260260 2015-01-04 08:49:05,263711 ... 

Существует несколько вопросов:

  • для некоторых временных меток отсутствуют данные (-1)
  • отсутствующие записи (также 2/3 последовательных часа)
  • частота наблюдений не составляет ровно 5 минут, но на самом деле теряет несколько секунд раз в то время

Я хотел бы получить регулярные временные ряды, поэтому с записями каждые (ровно) 5 минут (и без недостающего значения). Я успешно интерполировал временные ряды со следующим кодом, чтобы приблизить значения -1 с помощью этого кода:

 ts = pd.TimeSeries(values, index=timestamps) ts.interpolate(method='cubic', downcast='infer') 

Как я могу интерполировать и упорядочить частоту наблюдений? Спасибо всем за помощь.

One Solution collect form web for “Интерполяция и регуляризация временных рядов Python pandas”

Измените -1 с на NaN:

 ts[ts==-1] = np.nan 

Затем пересчитайте данные, чтобы иметь 5-минутную частоту.

 ts = ts.resample('5T') 

Обратите внимание, что по умолчанию, если два измерения попадают в тот же 5-минутный период, resample усредняет значения вместе.

Наконец, вы можете линейно интерполировать временной ряд по времени:

 ts = ts.interpolate(method='time') 

Поскольку, похоже, ваши данные уже имеют примерно 5-минутную частоту, вам может потребоваться повторная выборка на более короткой частоте, поэтому кубическая или сплайн-интерполяция может сгладить кривую:

 import numpy as np import pandas as pd import matplotlib.pyplot as plt values = [271238, 329285, -1, 260260, 263711] timestamps = pd.to_datetime(['2015-01-04 08:29:05', '2015-01-04 08:34:05', '2015-01-04 08:39:05', '2015-01-04 08:44:05', '2015-01-04 08:49:05']) ts = pd.Series(values, index=timestamps) ts[ts==-1] = np.nan ts = ts.resample('T', how='mean') ts.interpolate(method='spline', order=3).plot() ts.interpolate(method='time').plot() lines, labels = plt.gca().get_legend_handles_labels() labels = ['spline', 'time'] plt.legend(lines, labels, loc='best') plt.show() 

введите описание изображения здесь

  • Найти значения списка не в данных dataframe pandas
  • Pretty Printing a pandas dataframe
  • Python Numpy или Pandas Linear Interpolation для значений, связанных с датой
  • Python Как использовать ExcelWriter для записи в существующий рабочий лист
  • безопасность pandas и numpy
  • Как срезать один мультииндекс DataFrame с помощью MultiIndex другого
  • Pandas DataFrame concat vs append
  • проблемы с пандами читают csv
  •  
    Interesting Posts for Van-Lav

    Как я могу проверить, содержит ли один двумерный массив NumPy определенный шаблон значений внутри него?

    Почему кортежи заключены в круглые скобки?

    Неправильное смещение при использовании математического режима и индексов в Matplotlib и OSX

    Python TypeError: Требуемый аргумент 'source' (pos 1) не найден

    Можете ли вы создать традиционные массивы фиксированной длины и типа в Python?

    Python: почему этот код берется навсегда (бесконечный цикл?)

    Я хочу, чтобы индекс дескриптора исключения был исключен из диапазона.

    Заменить строку со значением словаря

    сгенерировать шаблонную матрицу

    Безголовый бесконечный свиток селена

    Проверка открытых файлов с помощью Python в Linux

    Проблемы с компоновкой Python 2.5.2 и Solaris 8 (gcc 3.4.2)

    Выполнение вызова POST вместо GET с использованием urllib2

    Python 2.7 и 3.3.2, почему int ('0.0') не работает?

    Преобразование списка строк в Python в float, где в списке также содержатся слова

    Python - лучший язык программирования в мире.