Python: выбор строк по часам в кадре данных - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть следующий фрейм данных в CSV-файле, я хотел бы выбрать все строки, соответствующие текущему часу.

time,values

2018-10-28 08:16:49.469508,48

2018-10-28 08:16:54.471987,48

2018-10-28 08:16:59.475236,48

2018-10-28 08:17:04.478681,48

Ниже приведена функция, которую я пробую current = datetime.datetime.now ()

start = datetime.datetime(current.year,current.month,current.day,current.hour,0)

end = datetime.datetime(current.year,current.month,current.day,current.hour,59)

df = pd.io.parsers.read_csv('water_data1.csv', parse_dates=[0], index_col=0)

print(df.query('start < time < end'))

Я получаю следующую ошибку

pandas.core.computation.ops.UndefinedVariableError: имя 'start' не определено

Может кто-нибудь предложить правильный синтаксис для достижения этой цели. Спасибо Hemanth

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

pd.DataFrame.query требует, чтобы внешним переменным предшествовал @:

df = pd.DataFrame({'A': list(range(10))})

start, end = 3, 6

print(df.query('@start < A < @end'))

   A
4  4
5  5

Вы также можете использовать pd.Series.between:

res = df[df['A'].between(start, end, inclusive=False)]

Наконец, при работе со значениями datetime вы должны предпочесть pd.Timestamp обычным типам Python:

now = pd.Timestamp('now')
start = now.replace(second=0, microsecond=0)
end = now.replace(second=59, microsecond=0)

print((start, end))

(Timestamp('2018-11-01 17:36:00'), Timestamp('2018-11-01 17:36:59'))
0 голосов
/ 01 ноября 2018

Вы можете попробовать

df[(df['time'] > start) & (df['time'] < end])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...