无法访问具有级别名称的MultiIndex DataFrame

时间:2018-05-24 20:40:49

标签: python-3.x pandas dataframe indexing

我第一次尝试使用MultiIndexing而且我不明白为什么我不能直接使用助记符名称索引DataFrame而不是通过.loc方法,就像我在使用单级索引时一样正如它在文档和我遇到的几个例子中所示。

以下是一些简化代码和2种方法的输出:

import numpy as np
import pandas as pd
ext = ['ms0', 'ms1', 'ms2']
node = ['supply', 'vdd', 'id0']
index = pd.MultiIndex.from_product([ext, node],names=('extension', 'nodes'))
df = pd.DataFrame(np.random.randn(9, 1), index=index)
df

                           0
extension   nodes   
      ms0  supply   2.730935
              vdd  -1.771695
              id0   1.644740
      ms1  supply   1.086473
              vdd   0.234862
              id0   0.910154
      ms2  supply  -0.274787
              vdd   0.450530
              id0   0.197895

以下作品:

df.loc['ms0']

                    0
     nodes  
    supply   2.730935
       vdd  -1.771695
       id0   1.644740

但这不是:

df['ms0']

...
D:\Apps\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in 
get_loc(self, key, method, tolerance)
   2525                 return self._engine.get_loc(key)
   2526             except KeyError:
-> 2527                 return 
self._engine.get_loc(self._maybe_cast_indexer(key))
   2528 
   2529         indexer = self.get_indexer([key], method=method, 
tolerance=tolerance)

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

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

KeyError: 'ms0'

MultiIndexing的文档显示了此示例:

In [25]: df['bar']
Out[25]: 
second       one       two
A       0.895717  0.805244
B       0.410835  0.813850
C      -1.413681  1.607920

那么为什么在这种情况下不起作用呢?

1 个答案:

答案 0 :(得分:0)

使用df ['ms0']将选择'ms0'列,该列不在所示的DataFrame中。另一方面,df.loc ['ms0']将选择索引为'ms0'的行,这是有效的。

https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html