2017-01-27 7 views
4

Я пытаюсь построить данные временных рядов, где на определенные периоды нет данных. Данные загружаются в dataframe, и я рисую его, используя df.plot(). Проблема в том, что отсутствующие периоды соединяются при построении графика, создавая впечатление, что ценность существует в этот период, а это не так.Как не обрабатывать недостающие периоды

Вот пример задачи

problem

Там нет данных между Sep 01 и Сен 08, а также между Сен 09 и 25 сентября, но данные нанесены таким образом, что кажется что в этот период есть значения.

Я хотел бы иметь нулевые значения, визуализированные в этот период, или никаких значений вообще. Как это сделать?

Просто, чтобы быть ясным, у меня нет значений NaN для периодов [Sep 01, Sep 08], [Sep 09, Sep 29], но нет данных вообще (даже не во временном индексе).

ответ

3

Вы должны добавить отсутствующие даты в свою фреймворк данных с значениями NaN. Затем, когда они построены, эти NaNs ломают линию - вы получите несколько сегментов линии с пустыми периодами между ними.

This answer объясняет, как добавить отсутствующие даты в ваш кадр данных. Для того, чтобы резюмировать, это следует сделать трюк:

df = df.reindex(pd.DatetimeIndex(df.index), fill_value=NaN) 
+0

Лучше 'ДФ = df.reindex (pd.DatetimeIndex (df.index))', то добавьте 'NaN' по умолчанию. Если хотите указать 'NaN' -' df = df.reindex (pd.DatetimeIndex (df.index), fill_value = np.nan) ' – jezrael

3

Рассмотрим pd.Seriess

s = pd.Series(
    np.arange(10), pd.date_range('2016-03-31', periods=10) 
).replace({3: np.nan, 6: np.nan}) 

s.plot() 

enter image description here

Вы можете увидеть np.nan были пропущены.
Однако:

s.fillna(0).plot() 

enter image description here

0 s не пропускаются.

Я предлагаю s.replace(0, np.nan).plot()