Повторная выборка / переиндексация данных датчика - PullRequest
0 голосов
/ 02 июля 2018

Я хочу выполнить некоторую обработку данных для данных датчиков (около 300 различных датчиков). Это пример необработанных данных от датчика температуры:

 "2018-06-30T13:17:05.986Z" 30.5
 "2018-06-30T13:12:05.984Z" 30.3
 "2018-06-30T13:07:05.934Z" 29.5
 "2018-06-30T13:02:05.873Z" 30.3
 "2018-06-30T12:57:05.904Z" 30

Я хочу пересчитать данные для сглаживания даты:

13:00:00
13:05:00
13:10:00
...

Я написал некоторый код, который работает, но невероятно медленно, когда используется с большими файлами. Мой код просто увеличивает все данные до 1 секунды с помощью линейной интерполяции. и затем уменьшают частоту до запрошенной частоты.

Есть ли более быстрый способ добиться этого?

EDIT: данные датчика записываются в базу данных, и мой код загружает данные из произвольного временного интервала из базы данных

РЕДАКТИРОВАТЬ2: мой рабочий код

upsampled = dataframe.resample('1S').asfreq()
upsampled = upsampled.interpolate(method=method, limit=limitT) # ffill or bfill for some sensors 
resampled = upsampled.astype(float).resample(str(sampling_time) + 'S').mean() # for temperature 
resampled = upsampled.astype(float).resample(str(sampling_time) + 'S').asfreq() # for everything else

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете сначала установить индекс для кадра данных в виде столбца с метками времени, а затем использовать метод resample(), чтобы перенести его в данные каждые 1 с или каждые 5 минут.

Например:

temp_df = pd.read_csv('temp.csv',header=None)
temp_df.columns = ['Timestamps','TEMP']
temp_df = temp_df.set_index('Timestamps') #set the timestamp column as index
temp_re_df = temp_df.TEMP.resample('5T').mean()

Вы можете установить период в качестве аргумента для resample(), т. Е. T - мин, S - сек, М - месяц, H - час и т. Д., А также применить функцию, такую ​​как mean() или max() или min() рассмотреть метод понижающей дискретизации.

P.S .: Это означает, что ваша временная метка представлена ​​в формате дата-время панд. Еще используйте pd.to_datetime(temp_df['Timestamps'],unit='s') для преобразования в столбец индекса даты и времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...