Хобрук: Ваш путь к мастерству в программировании

Фильтр индекса pandas без даты и времени

Я читаю CSV-файл со столбцом даты и времени, в котором случайным образом перемежаются блоки текста без даты и времени (5 строк в блоке за раз, а иногда и несколько блоков подряд). Ниже приведен пример фрагмента файла данных:

Дата,Время,Счетчик,Неисправность,Батарея 22.12.2015,05:24.0,39615.0,0.0,6.42 22.12.2015,05:25.0,39616.0,0.0,6.42 22.12.2015,05:26.0,39617.0 ,0.0,6.42 22/12/2015,05:27.0,39618.0,0.0,6.42 ,,,, Зонд STSO3275,,,, RMR,,,, Сайт по умолчанию,,,, X2CMBasicOpticsBurst,,,, ,,,, Зонд STSO3275,,,, RMR,,,, Сайт по умолчанию,,,, X2CMBasicOpticsBurst,,,, 22.12.2015,19:57.0,39619.0,0.0,6.42 22.12.2015,19:58.0,39620.0,0.0, 6.42 22.12.2015,19:59.0,39621.0,0.0,6.42 22.12.2015,20:00.0,39622.0,0.0,6.42 22.12.2015,20:01.0,39623.0,0.0,6.42 12/22/ 2015,20:02.0,39624.0,0.0,6.42

Я могу прочитать данные из буфера обмена и в кадр данных следующим образом:

df = pd.read_clipboard(sep=',')

Я ищу способ очистить столбец «Дата» от строк, не отформатированных по дате, перед преобразованием в индекс даты и времени. Я попытался преобразовать столбец в индекс, а затем в список и фильтровать следующим образом:

df.index=df['Date']
df = df[~df.index.get_loc('RMR')]
df = df[~df.index.get_loc('Default Site')]
df = df[~df.index.get_loc('X2CMBasicOpticsBurst')]
df = df[~df.index.get_loc('Sonde STSO3275')] 
df = df.dropna()

Затем я могу проанализировать даты и время вместе и получить правильный индекс даты и времени, используя инструменты анализа даты. Однако содержимое текстовых полей может меняться, и этот подход кажется очень ограниченным и не питоническим.

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

Заранее спасибо.

21.04.2016

Ответы:


1

Ну, вы можете использовать to_datetime

df.loc[:, 'Date'] = pd.to_datetime(df.Date, errors='coerce')

элемент, который не является датой и временем, будет преобразован в NaT, после чего вы можете его удалить.

df = df.dropna()
21.04.2016

2

Я думаю, вы можете использовать read_csv с dropna и to_datetime:

import pandas as pd
import io

temp=u"""Date,Time,Count,Fault,Battery
12/22/2015,05:24.0,39615.0,0.0,6.42
12/22/2015,05:25.0,39616.0,0.0,6.42
12/22/2015,05:26.0,39617.0,0.0,6.42
12/22/2015,05:27.0,39618.0,0.0,6.42
,,,,
Sonde STSO3275,,,,
RMR,,,,
Default Site,,,,
X2CMBasicOpticsBurst,,,,
,,,,
Sonde STSO3275,,,,
RMR,,,,
Default Site,,,,
X2CMBasicOpticsBurst,,,,
12/22/2015,19:57.0,39619.0,0.0,6.42
12/22/2015,19:58.0,39620.0,0.0,6.42
12/22/2015,19:59.0,39621.0,0.0,6.42
12/22/2015,20:00.0,39622.0,0.0,6.42
12/22/2015,20:01.0,39623.0,0.0,6.42
12/22/2015,20:02.0,39624.0,0.0,6.42"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), parse_dates=[['Date','Time']])
df = df.dropna()
df['Date_Time'] = pd.to_datetime(df.Date_Time, format="%m/%d/%Y %H:%M.%S")
print df
             Date_Time    Count  Fault  Battery
0  2015-12-22 05:24:00  39615.0    0.0     6.42
1  2015-12-22 05:25:00  39616.0    0.0     6.42
2  2015-12-22 05:26:00  39617.0    0.0     6.42
3  2015-12-22 05:27:00  39618.0    0.0     6.42
14 2015-12-22 19:57:00  39619.0    0.0     6.42
15 2015-12-22 19:58:00  39620.0    0.0     6.42
16 2015-12-22 19:59:00  39621.0    0.0     6.42
17 2015-12-22 20:00:00  39622.0    0.0     6.42
18 2015-12-22 20:01:00  39623.0    0.0     6.42
19 2015-12-22 20:02:00  39624.0    0.0     6.42
21.04.2016
Новые материалы

Как я могу подписаться на тему изображений в ROS Matlab и получить изображение RGB?
Привет, Пожалуйста, как я могу извлечь изображение из сообщения ROS Image, за которым следует imshow? Я уже подписался на правильную тему, но message.getData() дает мне объект..

Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

Как интегрировать модель машинного обучения на ios с помощью CoreMl
С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

Создание успешной организации по науке о данных
"Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

Технологии и проблемы будущей работы
Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

Игорь Минар из Google приедет на #ReactiveConf2017
Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

Я собираюсь научить вас Python шаг за шагом
Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..