Python 列在数据帧中可用,但在切片数据帧时无法获取

Python 列在数据帧中可用,但在切片数据帧时无法获取,python,pandas,dataframe,sparse-matrix,keyerror,Python,Pandas,Dataframe,Sparse Matrix,Keyerror,在对数据透视帧进行切片时,无法获取列名,并引发下面的错误。无法找出发生了什么,就好像在对数据帧进行切片时未提取可用列一样。 数据集为“MovieLens 100K数据集” 数据集是 movieRatings=ratings.pivot_table(index=['user_id'],columns=['title'],values=['rating']) 从“movieRatings.head()”中删除,如下所示 rating title 'Til There Was You

在对数据透视帧进行切片时,无法获取列名,并引发下面的错误。无法找出发生了什么,就好像在对数据帧进行切片时未提取可用列一样。 数据集为“MovieLens 100K数据集”

数据集是

movieRatings=ratings.pivot_table(index=['user_id'],columns=['title'],values=['rating'])

从“movieRatings.head()”中删除,如下所示

    rating
title   'Til There Was You (1997)   1-900 (1994)    101 Dalmatians (1996)   12 Angry Men (1957) 187 (1997)  2 Days in the Valley (1996) 20,000 Leagues Under the Sea (1954) 2001: A Space Odyssey (1968)    3 Ninjas: High Noon At Mega Mountain (1998) 39 Steps, The (1935)    ... Yankee Zulu (1994)  Year of the Horse (1997)    You So Crazy (1994) Young Frankenstein (1974)   Young Guns (1988)   Young Guns II (1990)    Young Poisoner's Handbook, The (1995)   Zeus and Roxanne (1997) unknown Á köldum klaka (Cold Fever) (1994)
user_id                                                                                 
1   NaN NaN 2.0 5.0 NaN NaN 3.0 4.0 NaN NaN ... NaN NaN NaN 5.0 3.0 NaN NaN NaN 4.0 NaN
2   NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3   NaN NaN NaN NaN 2.0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5   NaN NaN 2.0 NaN NaN NaN NaN 4.0 NaN NaN ... NaN NaN NaN 4.0 NaN NaN NaN NaN 4.0 NaN
下一个声明

starWarsRatings = movieRatings["12 Angry Men (1957)"]
starWarsRatings.head()
错误消息

KeyError                                  Traceback (most recent call last)
D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2645             try:
-> 2646                 return self._engine.get_loc(key)
   2647             except KeyError:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: '12 Angry Men (1957)'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-134-9c0f30e1dc98> in <module>
----> 1 starWarsRatings = movieRatings["12 Angry Men (1957)"]
      2 starWarsRatings.head()

D:\Anaconda\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2797         if is_single_key:
   2798             if self.columns.nlevels > 1:
-> 2799                 return self._getitem_multilevel(key)
   2800             indexer = self.columns.get_loc(key)
   2801             if is_integer(indexer):

D:\Anaconda\lib\site-packages\pandas\core\frame.py in _getitem_multilevel(self, key)
   2847     def _getitem_multilevel(self, key):
   2848         # self.columns is a MultiIndex
-> 2849         loc = self.columns.get_loc(key)
   2850         if isinstance(loc, (slice, Series, np.ndarray, Index)):
   2851             new_columns = self.columns[loc]

D:\Anaconda\lib\site-packages\pandas\core\indexes\multi.py in get_loc(self, key, method)
   2660         if not isinstance(key, (tuple, list)):
   2661             # not including list here breaks some indexing, xref #30892
-> 2662             loc = self._get_level_indexer(key, level=0)
   2663             return _maybe_to_slice(loc)
   2664 

D:\Anaconda\lib\site-packages\pandas\core\indexes\multi.py in _get_level_indexer(self, key, level, indexer)
   2927         else:
   2928 
-> 2929             code = self._get_loc_single_level_index(level_index, key)
   2930 
   2931             if level > 0 or self.lexsort_depth == 0:

D:\Anaconda\lib\site-packages\pandas\core\indexes\multi.py in _get_loc_single_level_index(self, level_index, key)
   2596             return -1
   2597         else:
-> 2598             return level_index.get_loc(key)
   2599 
   2600     def get_loc(self, key, method=None):

D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2646                 return self._engine.get_loc(key)
   2647             except KeyError:
-> 2648                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2649         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2650         if indexer.ndim > 1 or indexer.size > 1:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: '12 Angry Men (1957)'
keyrerror回溯(最近一次调用)
get\U loc中的D:\Anaconda\lib\site packages\pandas\core\index\base.py(self、key、method、tolerance)
2645请尝试:
->2646返回自引擎。获取位置(钥匙)
2647键错误除外:
熊猫\\u libs\index.pyx在熊猫中。\ u libs.index.IndexEngine.get_loc()
熊猫\\u libs\index.pyx在熊猫中。\ u libs.index.IndexEngine.get_loc()
pandas\\u libs\hashtable\u class\u helper.pxi在pandas.\u libs.hashtable.PyObjectHashTable.get\u item()中
pandas\\u libs\hashtable\u class\u helper.pxi在pandas.\u libs.hashtable.PyObjectHashTable.get\u item()中
关键错误:《12个愤怒的男人》(1957)
在处理上述异常期间,发生了另一个异常:
KeyError回溯(最近一次呼叫最后一次)
在里面
---->1 starWarsRatings=movieRatings[“12个愤怒的男人(1957)”]
2 starWarsRatings.head()
D:\Anaconda\lib\site packages\pandas\core\frame.py in\uuuuu getitem\uuuuuu(self,key)
2797如果是单钥匙:
2798如果self.columns.nlevels>1:
->2799返回自我。\u获取项目\u多级(键)
2800索引器=self.columns.get_loc(键)
2801如果是_整数(索引器):
D:\Anaconda\lib\site packages\pandas\core\frame.py in\u getitem\u多级(self,key)
2847 def_getitem_多级(自,键):
2848#self.columns是一个多索引
->2849 loc=self.columns.get_loc(键)
2850如果isinstance(loc,(切片、系列、np.ndarray、索引)):
2851新列=自列[loc]
D:\Anaconda\lib\site packages\pandas\core\index\multi.py in get\u loc(self、key、method)
2660如果不存在(键,(元组,列表)):
2661#此处不包括列表会中断一些索引,外部参照#30892
->2662 loc=self.\u get\u level\u索引器(键,level=0)
2663返回到切片(loc)
2664
D:\Anaconda\lib\site packages\pandas\core\index\multi.py in\u get\u level\u索引器(self、key、level、indexer)
2927其他:
2928
->2929代码=self.\u get\u loc\u single\u level\u index(level\u index,key)
2930
2931如果级别>0或self.lexsort_depth==0:
D:\Anaconda\lib\site packages\pandas\core\index\multi.py in\u get\u loc\u single\u level\u index(self、level\u index、key)
2596返回-1
2597其他:
->2598返回级别索引。获取位置(键)
2599
2600 def get_loc(自身、键、方法=无):
get\U loc中的D:\Anaconda\lib\site packages\pandas\core\index\base.py(self、key、method、tolerance)
2646返回自引擎。获取位置(钥匙)
2647键错误除外:
->2648返回self.\u引擎。获取self.\u loc(self.\u可能\u cast\u索引器(键))
2649 indexer=self.get\u indexer([key],method=method,tolerance=tolerance)
2650如果indexer.ndim>1或indexer.size>1:
熊猫\\u libs\index.pyx在熊猫中。\ u libs.index.IndexEngine.get_loc()
熊猫\\u libs\index.pyx在熊猫中。\ u libs.index.IndexEngine.get_loc()
pandas\\u libs\hashtable\u class\u helper.pxi在pandas.\u libs.hashtable.PyObjectHashTable.get\u item()中
pandas\\u libs\hashtable\u class\u helper.pxi在pandas.\u libs.hashtable.PyObjectHashTable.get\u item()中
关键错误:《12个愤怒的男人》(1957)

编辑-原始答案不是OP想要的

问题在于您创建它的方式。数组/列表
参数的解释与简单字符串不同。在这种情况下,只需使用字符串1。如果使用数组,则需要使用[
评级
,…]进行索引

因此,只要更改表的声明,它就会工作

table=df.pivot_table(索引=[..),值='只是一个字符串',列=[..])

尝试打印(movieRatings.columns)查看列名列表-可能缺少一些额外的空白?谢谢。我甚至试图直接从数据文件中复制相同的内容。空间不是问题。@nikochiko谢谢你,并用下面的代码尝试了同样的方法。但是得到了相同的键错误。在对数据帧进行切片时,数据透视帧无法识别列
starWarsRatings=movieRatings[movieRatings['title']==“101 Dalmatians(1996)”]starWarsRatings.head()
@nikochiko在数据透视操作之前对数据帧进行了相同的尝试。它给出了结果。后置数据透视不起作用<代码>评级[评级['title']==“101只斑点狗(1996)”
Oops,我误解了这个问题。好吧,这个漏洞在语法上。查看以下内容的结果:
moveRatings.index、movieRatings.values、movieRatings.columns
,然后您将看到哪里出了问题。除了执行
values=['rating']
,您还必须执行
values='rating'
@nikochiko,以获得与以下代码相同的代码摘录
movieRatings.columns多索引([('rating','Til have you(1997)],('rating',1-900(1994),('rating','101斑点狗(1996),…
next语句
movieRatings.index数组([[nan,nan,2.,…,nan,4.,nan],[nan,nan,nan,…,nan,nan],[nan,nan,nan,…,nan,nan,nan],
@nikochiko非常感谢。它没有出现错误,也没有创建子数据帧。