Pandas index.get_loc为时间序列数据提供了keyerror

时间:2018-03-25 05:30:07

标签: python pandas nsepy

以下代码可以正常使用。

import pandas as pd
#import numpy as np 
 import matplotlib.pyplot as plt 
 from IPython import get_ipython 
 get_ipython().run_line_magic('matplotlib', 'inline')

sym = 'SPY' 
df_close = pd.DataFrame() 
df_temp = pd.read_json('https://api.iextrading.com/1.0/stock/'+sym+'/chart/5y') 
df_temp.set_index('date',inplace=True) 
df_close = df_temp['close']

loc = df_close.index.get_loc('2015-08-17')

我将其修改为从nsepy package.i.e获取数据。替换 read_json 行并注释 set_index 行,因为从包中提取的数据默认情况下日期行为索引

import pandas as pd
#import numpy as np
import matplotlib.pyplot as plt
from IPython import get_ipython
from datetime import date
from nsepy import get_history

get_ipython().run_line_magic('matplotlib', 'inline')

sym = 'SBIN'
df_close = pd.DataFrame()
df_temp = get_history(symbol=sym,
                   start=date(2014,1,1),
                   end=date(2018,3,24))
#df_temp.set_index('date',inplace=True)
df_close = df_temp['Close']

loc = df_close.index.get_loc('2015-08-17')

在这两种情况下,df_close都是一个系列,它们中都有日期。唯一不同的是,在正确的情况下,它包含格式的日期 2013-03-25 00:00:00

在错误的情况下,它的格式如 2014-01-01

这是日志。

  

RUNFILE('C:/Users/Arun/.spyder-py3/Practise   files / market_correction.py',wdir ='C:/Users/Arun/.spyder-py3/Practise   trace')Traceback(最近一次调用最后一次):

     

文件“”,第1行,in       runfile('C:/Users/Arun/.spyder-py3/Practise files / market_correction.py',wdir ='C:/Users/Arun/.spyder-py3/Practise   文件)

     

文件   “C:\用户\阿伦\ Anaconda3 \ LIB \站点包\ Spyder的\ utils的\网站\ sitecustomize.py”   第707行,在runfile中       execfile(filename,namespace)

     

文件   “C:\用户\阿伦\ Anaconda3 \ LIB \站点包\ Spyder的\ utils的\网站\ sitecustomize.py”   第102行,在execfile中       exec(compile(f.read(),filename,'e​​xec'),namespace)

     

文件“C:/Users/Arun/.spyder-py3/Practise   files / market_correction.py“,第27行,in       loc = df_close.index.get_loc('2015-08-17')

     

文件   “C:\用户\阿伦\ Anaconda3 \ LIB \站点包\大熊猫\核心\ \指标base.py”   第2527行,在get_loc中       return self._engine.get_loc(self._maybe_cast_indexer(key))

     

文件“pandas / _libs / index.pyx”,第117行,in   pandas._libs.index.IndexEngine.get_loc

     

文件“pandas / _libs / index.pyx”,第139行,in   pandas._libs.index.IndexEngine.get_loc

     

文件“pandas / _libs / hashtable_class_helper.pxi”,第1265行,   pandas._libs.hashtable.PyObjectHashTable.get_item

     

文件“pandas / _libs / hashtable_class_helper.pxi”,第1273行,in   pandas._libs.hashtable.PyObjectHashTable.get_item

     

KeyError:'2015-08-17'

我做错了什么?这一天出现在系列中。

我也尝试过df.loc方法,但这会产生其他错误。

我正在使用带有python 3.6的anaconda spyder

解决方案:

import pandas as pd
#import numpy as np
import matplotlib.pyplot as plt
from IPython import get_ipython
from datetime import date
from nsepy import get_history

get_ipython().run_line_magic('matplotlib', 'inline')

sym = 'SBIN'
df_close = pd.DataFrame()
df_temp = get_history(symbol=sym,
                   start=date(2014,1,1),
                   end=date(2018,3,24))

**df_temp.reset_index(drop = False, inplace = True)
df_temp['Date']= pd.to_datetime(df_temp['Date'])
df_temp.set_index('Date',inplace=True)**
df_close = df_temp['Close']

loc = df_close.index.get_loc('2015-08-17')

1 个答案:

答案 0 :(得分:1)

我认为需要 set_index 并且可能转换为日期时间,因为 KeyError 表示索引中没有值 2015-08-17


& #xA;
  #check if DatetimeIndex
 print(df_temp.index)

 #if required column to index
 df_temp.set_index('date',inplace =真的
 #if必要转换为日期时间
 df_temp.index = pd.to_datetime(df_temp.index)

 loc = df_temp.index.get_loc('2015-08-17' )