如何切片通过数据库查询的数据的日期?
how to slice dates of data queried through database?
如何使用标准输入函数对数据进行切片?
我的数据如下:
time duration
0 2018-07-04 12:19:29+00:00 4000000000
1 2018-07-04 12:20:30+00:00 4000000000
2 2018-07-04 12:21:31+00:00 3700000000
3 2018-07-04 12:22:31+00:00 4100000000
4 2018-07-04 12:23:31+00:00 4100000000
我从influxdb查询数据,然后转换成Dataframe。
当输入 Starting date :
时,它给了我一个错误 SyntaxError: invalid token
我试图将 time
列拆分为单独的 date
和 Time
import influxdb
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
client = influxdb.DataFrameClient('192.168.1.108' , port = 8086, database = 'Mlogi_01081081')
dfs_dict = client.query('select * from sy_1')
measurement = next(iter(dfs_dict))
ret = dfs_dict[measurement]
df = pd.DataFrame.from_dict(ret)
df = df.reset_index()
df.rename( columns={'index':'time'}, inplace=True )
df['time'] = pd.to_datetime(df['time'])
df['Time'] = df['time'].dt.time
df['date'] = df['time'].dt.date
df['date'] = pd.to_datetime(df['date'])
df = df.set_index(['date'])
a = input('Starting_Date: ')
b = input('Ending_Date :')
starting_date = datetime.strptime(a, "%Y-%m-%d").date()
ending_date = datetime.strptime(b, "%Y-%m-%d").date()
df.loc[starting_date:ending_date]
仍然没有运气!!!
这应该是你的选择,根据你的问题,我假设你想使用 date
作为你指定的列来获取两次之间的所有数据来进行过滤。根据 OP 的要求,由于他使用的是 Python 2.7,因此键入的输入应像这样用引号引起来,以便用户输入正常工作。
>>> input("please type the date: ")
please type the date: 2016-08-09
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
2016-08-09
^
SyntaxError: invalid token
>>> input("please type the date: ")
please type the date: "2018-07-09"
'2018-07-09'
现在是过滤数据的真正问题,您可以执行以下操作:
newdf = df[(df["date"]>starting_date) and df["date"]<=ending_date]
这应该会给您预期的结果。但是您必须确保 df["date"]
具有与 starting_date
和 ending_date
.
相同的数据类型
如何使用标准输入函数对数据进行切片?
我的数据如下:
time duration
0 2018-07-04 12:19:29+00:00 4000000000
1 2018-07-04 12:20:30+00:00 4000000000
2 2018-07-04 12:21:31+00:00 3700000000
3 2018-07-04 12:22:31+00:00 4100000000
4 2018-07-04 12:23:31+00:00 4100000000
我从influxdb查询数据,然后转换成Dataframe。
当输入 Starting date :
SyntaxError: invalid token
我试图将 time
列拆分为单独的 date
和 Time
import influxdb
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
client = influxdb.DataFrameClient('192.168.1.108' , port = 8086, database = 'Mlogi_01081081')
dfs_dict = client.query('select * from sy_1')
measurement = next(iter(dfs_dict))
ret = dfs_dict[measurement]
df = pd.DataFrame.from_dict(ret)
df = df.reset_index()
df.rename( columns={'index':'time'}, inplace=True )
df['time'] = pd.to_datetime(df['time'])
df['Time'] = df['time'].dt.time
df['date'] = df['time'].dt.date
df['date'] = pd.to_datetime(df['date'])
df = df.set_index(['date'])
a = input('Starting_Date: ')
b = input('Ending_Date :')
starting_date = datetime.strptime(a, "%Y-%m-%d").date()
ending_date = datetime.strptime(b, "%Y-%m-%d").date()
df.loc[starting_date:ending_date]
仍然没有运气!!!
这应该是你的选择,根据你的问题,我假设你想使用 date
作为你指定的列来获取两次之间的所有数据来进行过滤。根据 OP 的要求,由于他使用的是 Python 2.7,因此键入的输入应像这样用引号引起来,以便用户输入正常工作。
>>> input("please type the date: ")
please type the date: 2016-08-09
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
2016-08-09
^
SyntaxError: invalid token
>>> input("please type the date: ")
please type the date: "2018-07-09"
'2018-07-09'
现在是过滤数据的真正问题,您可以执行以下操作:
newdf = df[(df["date"]>starting_date) and df["date"]<=ending_date]
这应该会给您预期的结果。但是您必须确保 df["date"]
具有与 starting_date
和 ending_date
.