Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据与datetime分组不正确_Python_Datetime_Pandas Groupby_Datetime Format_Python Datetime - Fatal编程技术网

Python 数据与datetime分组不正确

Python 数据与datetime分组不正确,python,datetime,pandas-groupby,datetime-format,python-datetime,Python,Datetime,Pandas Groupby,Datetime Format,Python Datetime,我有以下代码: import pandas as pd from pandas import datetime from pandas import DataFrame as df import matplotlib from pandas_datareader import data as web import matplotlib.pyplot as plt import datetime import fxcmpy import numpy as np symbols = con.get_

我有以下代码:

import pandas as pd
from pandas import datetime
from pandas import DataFrame as df
import matplotlib
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import datetime
import fxcmpy
import numpy as np
symbols = con.get_instruments()

ticker = 'NGAS'
start = datetime.datetime(2015,1,1)
end = datetime.datetime.today()
data = con.get_candles(ticker, period='m1', number=10000)
data.index = pd.to_datetime(data.index, format ='%Y-%m-%d %hh:%mm %s')
data.index = pd.to_datetime(data.index, format ='%Y-%m-%d %hh:%mm %s')
data['hour'] = data.index.hour
data['minute'] = data.index.minute
数据产生以下结果:

    bidopen bidclose    bidhigh bidlow  askopen askclose    askhigh asklow  tickqty hour    minute
date                                            
2019-12-05 07:00:00 2.4230  2.4280  2.4300  2.422   2.4305  2.4360  2.439   2.4295  47  7   0
2019-12-05 07:01:00 2.4280  2.4265  2.4270  2.426   2.4360  2.4340  2.436   2.4340  10  7   1
2019-12-05 07:02:00 2.4265  2.4295  2.4300  2.426   2.4340  2.4370  2.438   2.4340  35  7   2
2019-12-05 07:03:00 2.4295  2.4285  2.4300  2.428   2.4370  2.4360  2.438   2.4360  20  7   3
2019-12-05 07:04:00 2.4285  2.4350  2.4360  2.428   2.4360  2.4425  2.444   2.4360  50  7   4
... ... ... ... ... ... ... ... ... ... ... ...
2019-12-17 15:07:00 2.3335  2.3340  2.3345  2.332   2.3410  2.3415  2.342   2.3395  94  15  7
2019-12-17 15:08:00 2.3340  2.3345  2.3355  2.334   2.3415  2.3420  2.344   2.3415  22  15  8
2019-12-17 15:09:00 2.3345  2.3335  2.3345  2.332   2.3420  2.3410  2.342   2.3410  15  15  9
2019-12-17 15:10:00 2.3335  2.3325  2.3345  2.331   2.3410  2.3400  2.342   2.3390  72  15  10
2019-12-17 15:11:00 2.3325  2.3270  2.3325  2.326   2.3400  2.3345  2.340   2.3335  99  15  11
在上表中,小时数从7开始到15结束。但是,当我运行以下代码时,小时从0开始,到59结束。为什么呢

df = data.groupby(['hour', 'minute']).mean()

        bidopen bidclose    bidhigh bidlow  askopen askclose    askhigh asklow  tickqty
hour    minute                                  
0   0   2.302786    2.303500    2.304286    2.302071    2.310571    2.311214    2.312000    2.310143    16.285714
1   2.294917    2.294333    2.295250    2.293583    2.302667    2.302000    2.303333    2.301333    14.500000
2   2.283000    2.283333    2.283833    2.282333    2.290667    2.290833    2.292000    2.290167    18.666667
3   2.298417    2.298833    2.299167    2.297833    2.305917    2.306333    2.307000    2.305917    14.833333
4   2.283583    2.284000    2.284250    2.283000    2.291083    2.291750    2.292167    2.291083    14.166667
... ... ... ... ... ... ... ... ... ... ...
23  55  2.285500    2.285800    2.286600    2.284700    2.293100    2.293400    2.294300    2.292600    10.400000
56  2.303800    2.304000    2.304600    2.303300    2.311400    2.311700    2.312500    2.311000    11.200000
57  2.268700    2.268400    2.268900    2.268100    2.276200    2.276100    2.276700    2.275900    5.800000
58  2.302857    2.303000    2.303286    2.302357    2.310571    2.310571    2.311214    2.310286    8.000000
59  2.321300    2.321000    2.321700    2.320400    2.328900    2.328900    2.329500    2.328700    8.400000
我想做的是按小时分组数据,从7开始到15结束,然后我想知道它的平均值。所以平均7到15小时

- 编辑1: 如何将小时和天设置为索引

data.set_index('minute', inplace = True)
data.set_index('hour', inplace = True)

给我一个错误首先,你看到的是一个多索引。你会看到小时从0到23,分钟从0到59

如果你想知道每小时的平均值,你只需要:

数据。分组依据['hour']。平均值

如果您选择按其他数量分组,例如在data.groupby['hour','minute']中。这意味着调用.reset_索引可能会有帮助,以避免多索引的混淆


e、 g.df=data.groupby['hour','minute'].mean.reset_index

首先,您看到的是一个多索引。你会看到小时从0到23,分钟从0到59

如果你想知道每小时的平均值,你只需要:

数据。分组依据['hour']。平均值

如果您选择按其他数量分组,例如在data.groupby['hour','minute']中。这意味着调用.reset_索引可能会有帮助,以避免多索引的混淆


e、 g.df=data.groupby['hour','minute'].mean.reset_index

您看到的结果是正确的:

第一行的日期是12月5日,最后一行的日期是12月17日,所以中间有很多行,一天的时间是下午3点之后或早上7点之前

尝试df[df['hour']>15]。前往查看一些当天晚于下午3点的线路

更新: 要获得7-15小时的平均值,请首先查看下面的示例代码

df = pd.DataFrame()

df['hour']=np.array([15,12,10,6,4,19,15,12,10])
df['price']=np.array([1,2,3,4,5,6,7,8,9])

df[(df['hour']>=7)&(df['hour']<=15)].mean().price

或者按小时计算

df[(df['hour']>=7)&(df['hour']<=15)].groupby('hour').mean()

您看到的结果是正确的:

第一行的日期是12月5日,最后一行的日期是12月17日,所以中间有很多行,一天的时间是下午3点之后或早上7点之前

尝试df[df['hour']>15]。前往查看一些当天晚于下午3点的线路

更新: 要获得7-15小时的平均值,请首先查看下面的示例代码

df = pd.DataFrame()

df['hour']=np.array([15,12,10,6,4,19,15,12,10])
df['price']=np.array([1,2,3,4,5,6,7,8,9])

df[(df['hour']>=7)&(df['hour']<=15)].mean().price

或者按小时计算

df[(df['hour']>=7)&(df['hour']<=15)].groupby('hour').mean()
可能data.index=pd.to_datetimedata.index,格式=“%Y-%m-%d%hh:%mm%s”应更改为data.index=pd.to_datetimedata.index,格式=“%Y-%m-%d%H:%m%s”,时间为小时、分钟和秒

可能data.index=pd.to_datetimedata.index,格式=“%Y-%m-%d%hh:%mm%s”应更改为data.index=pd.to_datetimedata.index,格式=“%Y-%m-%d%H:%m%s”,时间为小时、分钟和秒

%hh:%mm%s在python datetime中不受支持,而不是:

data.index = pd.to_datetime(data.index, format ='%Y-%m-%d %hh:%mm %s')
使用:

%hh:%mm%s在python datetime中不受支持,而不是:

data.index = pd.to_datetime(data.index, format ='%Y-%m-%d %hh:%mm %s')
使用:


为什么要按小时和分钟分组?只是想一想,可能是因为没有设置索引:data.set_index'minute',inplace=True和data.set_index'hour',inplace=True@ZaphodBeeblebrox我试过了,但我得到了一个关键错误:['minute']在列中您为什么按小时和分钟分组?只是想一想可能是因为索引未设置:data.set_index'minute',inplace=True和data.set_index'hour',inplace=True@ZaphodBeeblebrox我试过了,但我得到了一个关键错误:['minute']在列中我按照您的建议尝试了,但df仍然在每小时从0到23,每分钟从0到59。我假设您在上面打印时只看到数据帧行总数的一小部分。例如,如果您想查看数据中表示的所有唯一小时数,可以键入printdata[hours].unique。我试图将小时和分钟设置为索引,但我得到了错误键error:['minute']都不在列中。我想我需要将它们设置为索引。我使用了数据。set_index'minute',inplace=True数据。set_index'hour',inplace=True我按照您的建议尝试了,但df仍然是从0到23小时,0到59分钟。我假设您在上面打印时只看到了数据帧行总数的一小部分。例如,如果您想查看数据中表示的所有唯一小时数,可以键入printdata[hours].unique。我试图将小时和分钟设置为索引,但我得到了错误键error:['minute']都不在列中。我想我需要将它们设置为索引。我使用了数据。set_index'minute',inplace=True数据。set_index'hour',inplace=True那么我如何表示7到15小时的所有时间呢?那么我如何表示7到15小时的所有时间呢