【问题标题】:how to slice dates of data queried through database?如何对通过数据库查询的数据进行切片日期?
【发布时间】:2018-08-17 03:44:27
【问题描述】:

如何使用 std 输入函数对数据进行切片?

我的数据如下:

                 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 列拆分为单独的dateTime

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]

还是没有运气!!!

【问题讨论】:

  • 在.之间使用。
  • 您是否尝试使用time 列过滤数据框?
  • 这就是你想做的df['Time'] = df['time'].dt.time df['date'] = df['time'].dt.date ?这不适用于您的情况吗?
  • 我已将time 列拆分为datetime 列,以便我可以使用std input 使用date 列将数据框分割为Starting dateEnding date意味着...希望我清除了我需要的东西@user2906838
  • 您的 std_input 工作正常吗?所以你的日期字段是datetime.date 对吗?

标签: python python-2.7 pandas influxdb-python


【解决方案1】:

这应该是您的选择,根据您的问题,我假设您希望使用 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_dateending_date 相同的数据类型。

【讨论】:

  • 我希望从控制台@user2906838 选择日期作为标准输入
  • 是的,我认为您的input 代码很好,有什么问题?
  • 我已经更新了这个问题,请查看 split time 方法 @user2906838
  • 我现在非常不清楚,你到底想达到什么目标,什么是行不通的。
  • newdf = df[(df["date"]&gt;Starting_date) and df["date"]&lt;=Ending_date] ] 在 spyder IDLE 中给出了无效的语法:(
猜你喜欢
  • 2018-09-26
  • 2020-03-20
  • 2015-10-30
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
相关资源
最近更新 更多