У меня есть нерегулируемые данные с интервалом в одну минуту, например:
Date Vel Dir
14-11-2001 17:55:00 14.1 35
14-11-2001 17:56:00 10.4 52
14-11-2001 17:57:00 14.8 19
14-11-2001 18:04:00 11.4 54
14-11-2001 18:05:00 7.6 13
Я хочу передискретизировать эти данные с интервалом в 3 часа (0,3,6,9,12,15,18,21) таким образом, что если, например, данные в час 18 и минута 00 отсутствуют, я замените его ближайшими данными в диапазоне пяти минут после или до минуты 00. В этом примере у меня есть время 17 57 ближе к 18 00, чем 18 04, поэтому я заменяю данные для отсутствующего времени 18 00 данными 17 57 следующим образом:
14-11-2001 15:00:00 5.8 43
14-11-2001 18:00:00 14.8 19
14-11-2001 21:00:00 17.4 68
Если у меня нет данных в интервале пяти минут после или до минуты 00, я не заполняю недостающие данные, оставляя час с NaN следующим образом:
14-11-2001 15:00:00 5.8 43
14-11-2001 18:00:00 NaN NaN
14-11-2001 21:00:00 17.4 68
Я пытаюсь сделать это с помощью команды .resample('3H') панд, но я не знаю, как это сделать, заменив отсутствующие значения ближайшими данными в диапазоне пяти минут.
Я попытался использовать np.searchshorted, но мне не удалось установить с ним диапазон в пять минут, поэтому я отказываюсь от этой идеи.
Мой код сейчас очень прост, я просто читаю текстовый файл с данными и передискретизирую его с интервалом в 3 часа без замены данных, поэтому мои данные выглядят так, когда я извлекаю их для текстового файла:
Date Vel Dir
14-11-2001 15:00:00 5.8 43
14-11-2001 18:00:00
14-11-2001 21:00:00 17.4 68
Код:
import numpy as np
import pandas as pd
dateparse = lambda x: pd.datetime.strptime(x,'%d %m %Y %H %M')
vento= pd.read_csv('vento.txt',header=0, delim_whitespace= True, parse_dates = [['Dia', 'Mes', 'Ano', 'Hora','Minuto']], index_col = 0, date_parser = dateparse)
vento_2=vento.resample('3H')
vento_2.to_csv(r'data.txt',index=True, index_label=None, sep='\t')