代码之家  ›  专栏  ›  技术社区  ›  Lazloo Xp

TypeError:无法在<class'pandas.indexes.base上进行标签索引。使用这些索引器

  •  9
  • Lazloo Xp  · 技术社区  · 7 年前

    B=pd.DataFrame(data=[[1,1,1],[2,2,2]],columns={'A','B','C'})
    print(B.loc[0,'B'])
    B = B.rename(index=str,columns={'B':'B_B'})
    print(B.loc[0,'B_B'])
    

    此代码导致以下输出:

    > 1
    
    >Traceback (most recent call last):
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-29-6df9197203b9>", line 4, in <module>
        print(B.loc[0,'B_B'])
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 1310, in __getitem__
        return self._getitem_tuple(key)
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 796, in _getitem_tuple
        return self._getitem_lowerdim(tup)
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 922, in _getitem_lowerdim
        section = self._getitem_axis(key, axis=i)
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 1482, in _getitem_axis
        self._has_valid_type(key, axis)
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 1409, in _has_valid_type
        key = self._convert_scalar_indexer(key, axis)
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 196, in _convert_scalar_indexer
        return ax._convert_scalar_indexer(key, kind=self.name)
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\indexes\base.py", line 1171, in _convert_scalar_indexer
        return self._invalid_indexer('label', key)
      File "C:\Users\FreieL01\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\indexes\base.py", line 1284, in _invalid_indexer
        kind=type(key)))
    TypeError: cannot do label indexing on <class 'pandas.indexes.base.Index'> with these indexers [0] of <class 'int'>}
    

    重命名似乎改变了我的datafframe对象的类型。。。

    1 回复  |  直到 6 年前
        1
  •  9
  •   cs95 abhishek58g    7 年前

    df.rename(index=str, ...) 使数据帧索引类型转换为字符串类型,因此它们将是字符串。你可以通过打印出来确认这一点。

    In [19]: B.index
    Out[19]: Index(['0', '1'], dtype='object')
    

    因此,这是可行的:

    In [18]: print(B.loc['0', 'B_B'])
    1
    

    index 属性时重命名 B

    B = B.rename(columns={'B':'B_B'})