Заполнение дыр в дневном временном ряду с помощью Pandas DataFrame пропускает дыру в 00:00 - PullRequest
0 голосов
/ 09 мая 2019

У меня есть временной ряд, сохраненный в CSV, и я выгружаю его в DataFrame, и он выглядит следующим образом

                         time station_id station_name value
0   2019-05-08 00:10:00+00:00    9018823     XXXXXXXX    11
1   2019-05-08 00:20:00+00:00    9018823     XXXXXXXX    10
2   2019-05-08 00:30:00+00:00    9018823     XXXXXXXX     9
3   2019-05-08 00:40:00+00:00    9018823     XXXXXXXX     9
4   2019-05-08 00:50:00+00:00    9018823     XXXXXXXX     9

Я использую Pandasto, чтобы заполнить пропущенные в течение дня дыры, я хочу делать это только изо дня в день с 2019-05-08 00:00:00+00:00 до 2019-05-08 23:50:00+00:00. Я использовал следующее, чтобы заполнить отверстия, но я не могу заполнить недостающее в 00:00.

data = data.set_index(keys=['time']).resample('10min', fill_method='ffill')

Это то, что я могу сделать с пандами?

UPDATE

Попытка, как предложено с reindex Я получаю полный промежуток времени, но результирующий DataFrame имеет значения NaN в значениях.

date_str = data['time'].iloc[0].strftime('%Y-%m-%d')
time_range = pd.date_range(date_str, date_str + ' 23:59:00', freq='10T')

data = (data.set_index(keys=['time'])
            .resample('10min').ffill()
            .reindex(time_range).bfill())
                     station_id  station_name  value
2019-05-08 00:00:00         NaN           NaN    NaN
2019-05-08 00:10:00         NaN           NaN    NaN
2019-05-08 00:20:00         NaN           NaN    NaN
2019-05-08 00:30:00         NaN           NaN    NaN
2019-05-08 00:40:00         NaN           NaN    NaN
2019-05-08 00:50:00         NaN           NaN    NaN
2019-05-08 01:00:00         NaN           NaN    NaN
2019-05-08 01:10:00         NaN           NaN    NaN
2019-05-08 01:20:00         NaN           NaN    NaN
2019-05-08 01:30:00         NaN           NaN    NaN
2019-05-08 01:40:00         NaN           NaN    NaN
2019-05-08 01:50:00         NaN           NaN    NaN

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

функция interpolate имеет несколько различных методов и направлений заполнения, попробуйте поиграть с этим, может быть?

date_range = pd.date_range(firstDate, lastDate, freq='10Min')

df = df.reindex( date_range, fill_value=np.NaN)
df = df.interpolate(method='pad', limit_direction='forward', axis=1)
0 голосов
/ 09 мая 2019

Попробуйте reindex:

# day of data
date_str = data['time'].iloc[0].strftime('%Y-%m-%d')
time_range = pd.date_range(date_str, date_str + ' 23:59:00', freq='10T')

data = (data.set_index(keys=['time'])
            .resample('10min', fill_method='ffill')
            .reindex(time_range).bfill())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...