我在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
以下是我正在尝试的功能 当前= 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:未定义名称“开始”
有人可以建议实现此目的的正确语法是什么。 谢谢 强度
答案 0 :(得分:1)
您可以尝试
df[(df['time'] > start) & (df['time'] < end])]
答案 1 :(得分:1)
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
值时,您应该比常规Python类型更喜欢pd.Timestamp
:
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'))