我第一次尝试使用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
那么为什么在这种情况下不起作用呢?
答案 0 :(得分:0)
使用df ['ms0']将选择'ms0'列,该列不在所示的DataFrame中。另一方面,df.loc ['ms0']将选择索引为'ms0'的行,这是有效的。
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html