数据帧中的对象值的KeyError

时间:2019-11-26 02:54:38

标签: python pandas dataframe keyerror

有人可以解释为什么“路易斯维尔”返回键错误吗?据我了解,它在数据框中。我想念什么?

这是数据的样子。这是CSV。

data

这是off_data.head()的样子

off_data.head()

off_data.index()

off_data.index()

off_data.columns

off_data.columns

off_data[0:2].to_dict()

off_data[0:2].to_dict()

Rajith Thennakoon的建议

Rajith Thennakoon's suggestion

{'Conf': {'Michigan St. ': 'B10', 'Louisville ': 'ACC'},
 'AdjTempo': {'Michigan St. ': 70.4, 'Louisville ': 67.8},
 'AdjOE': {'Michigan St. ': 114.4, 'Louisville ': 113.9},
 'eFG%': {'Michigan St. ': 52.9, 'Louisville ': 60.7},
 'TO%': {'Michigan St. ': 15.9, 'Louisville ': 17.1},
 'OR%': {'Michigan St. ': 37.1, 'Louisville ': 32.8},
 'FTRate': {'Michigan St. ': 30.9, 'Louisville ': 32.5},
 'AdjDE': {'Michigan St. ': 85.1, 'Louisville ': 87.5},
 'deFG%': {'Michigan St. ': 40.3, 'Louisville ': 42.9},
 'dTO%': {'Michigan St. ': 20.7, 'Louisville ': 15.9},
 'dOR%': {'Michigan St. ': 25.0, 'Louisville ': 27.6},
 'dFTRate': {'Michigan St. ': 27.3, 'Louisville ': 26.0}}

输入

import pandas as pd

off_data = pd.read_csv(r'C:\Users\westc\Desktop\sports.data\ncaab\kenpomdata\off20.csv', index_col= 'Team')

type(off_data)

off_data.loc["Louisville",0]

输出

  

KeyError跟踪(最近的呼叫   最后)〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexes \ base.py在   get_loc(self,key,method,tolerance)2896试试:   -> 2897返回self._engine.get_loc(key)2898,除了KeyError:

     

pandas._libs.index.IndexEngine.get_loc()中的pandas_libs \ index.pyx

     

pandas._libs.index.IndexEngine.get_loc()中的pandas_libs \ index.pyx

     

pandas_libs \ hashtable_class_helper.pxi在   pandas._libs.hashtable.PyObjectHashTable.get_item()

     

pandas_libs \ hashtable_class_helper.pxi在   pandas._libs.hashtable.PyObjectHashTable.get_item()

     

KeyError:“路易斯维尔”

     

在处理上述异常期间,发生了另一个异常:

     
    

KeyError跟踪(最近的呼叫     最后)           4           5种(off_data)     ----> 6 off_data.loc [“路易斯维尔”,0]

         

〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py在      getitem ((自身,密钥))1416除了(KeyError,IndexError,AttributeError):1417通过     -> 1418返回self._getitem_tuple(key)1419否则:1420#根据定义,我们只有第0个轴

         

〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py在     _getitem_tuple(自我,tup)         803 def _getitem_tuple(self,tup):         804尝试:     -> 805返回self._getitem_lowerdim(tup)         806除了IndexingError:         807通过

         

〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py在     _getitem_lowerdim(自我,tup)         927 for i,输入enumerate(tup):         第928章真相大白(四更)     -> 929节= self._getitem_axis(key,axis = i)         930         931#我们产生了一个标量?

         

〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py在     _getitem_axis(self,key,axis)1848#直查找1849 self._validate_key(key,axis)     -> 1850返回self._get_label(键,轴=轴)1851 1852

         

〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py在     _get_label(自我,标签,轴)         158提高IndexingError(“这里没有切片,在其他地方处理”)         159     -> 160返回self.obj._xs(label,axis = axis)         161         162 def _get_loc(self,key:int,axis:int):

         

〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ generic.py in xs(self,key,     轴,水平,drop_level)3735 loc,new_index =     self.index.get_loc_level(key,drop_level = drop_level)3736
    其他:     -> 3737 loc = self.index.get_loc(key)3738 3739 if isinstance(loc,np.ndarray):

         

〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexes \ base.py在     get_loc(self,key,method,tolerance)2897返回     self._engine.get_loc(key)2898`

  

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式获取行:

off_data.loc[off_data['Team'] == "Louisville"]

您执行位置操作的方式需要列名称,根据您的输出,该列名称似乎是Team,您可以尝试以下操作以查看其是否有效:

In [4496]: df2.loc[0,"Team"]                                                                                                                                                   
Out[4496]: 'Michigan'

In [4497]: df2.loc[1,"Team"]                                                                                                                                                   
Out[4497]: 'Louisville'

数据中似乎有空格,这是在末尾去除空格的快速方法:

off_data.index = off_data.index.str.strip()

应该可以让您按原样进行搜索:

off_data[off_data.index == 'Louisville']

答案 1 :(得分:1)

尝试

off_data.index = off_data.index.str.strip()
off_data.loc[off_data.index == "Louisville"]

编辑

如果在读取数据框时需要删除空格,则可以使用skipinitialspace=True。这将在定界符后跳过空格。

df1 = pd.read_csv(.. skipinitialspace=True)

或者需要删除特定列的空格,可以这样使用

df["column_name"] = df["column_name"].str.strip()

或者您也可以使用熊猫rstriplstrip

lstrip,Strip空格(包括换行符)或“系列/索引”中每个字符串左侧的一组指定字符。

rstrip,Strip空格(包括换行符)或来自系列/索引中每个字符串的右侧的一组指定字符。