KeyError:设置索引时,“ ['minute']都不在列中”

时间:2019-12-21 09:18:05

标签: python-3.x pandas

我有以下代码:

import pandas as pd
from pandas import datetime
from pandas import DataFrame as df
import matplotlib

import datetime
import fxcmpy
import numpy as np

print(con.get_instruments())
symbols = con.get_instruments()

ticker = 'NGAS'
start = datetime.datetime(2015,1,1)
end = datetime.datetime.today()
data1= 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

一切正常,直到这里:

我跑步时

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

我收到以下错误

KeyError: "None of ['minute'] are in the columns"

如何将小时和分钟设置为索引?

1 个答案:

答案 0 :(得分:1)

我不是使用 fxcmpy 而是从源CSV文件读取数据, 这样它最初包含:

                        C1     C2
2019-05-02 12:33 22  Xxxx1  Yyyy1
2019-05-04 10:12 00  Xxxx2  Yyyy2
2019-05-05 16:54 13  Xxxx3  Yyyy3

(没有名称的索引,为 string )。

您的错误采用 format 参数:

  • 小时格式应为%H (一个大写字母 H ,而不是%hh )。
  • li>
  • 分钟格式应为*%M(一个大写字母 M ,而不是%mm )。
  • 第二格式应为%S (也是大写)。

有关详细信息,请参见https://strftime.org/

因此将您的代码更正为:

data.index = pd.to_datetime(data.index, format='%Y-%m-%d %H:%M %S')

,您的DataFrame的索引将更改为 datetime64

然后

data['hour'] = data.index.hour
data['minute'] = data.index.minute

应该没有错误地执行(至少我没有错误)。

但是您编写2条单独指令的方式是,首先将索引设置为 hour 并且然后分钟看起来很奇怪。

也许您想创建具有两者 小时分钟列的MultiIndex? 如果是这种情况,请运行:

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