我使用DataFrame
带有分层索引的熊猫,在一种特殊情况下,它由浮点值索引。
这是示例:
example_data = [
{'a': 1.2, 'b':30, 'v':123},
{'a': 1.2, 'b':60, 'v':1234},
{'a': 3, 'b':30, 'v':12345},
{'a': 3, 'b':60, 'v':123456},
]
frame = pd.DataFrame(example_data)
frame.set_index(['a', 'b'])
Run Code Online (Sandbox Code Playgroud)
现在我想使用部分索引来选择框架,a==1.2
然后显示它。文档显示了如何对字符串索引执行此操作,但这种方法显然不适用于浮点数,与我是否尝试frame.loc[1.2]
得到关于 1.2 不正确的错误无关,Int64Index
这显然是正确的,因为我使用浮点数进行索引。
有没有办法在熊猫中使用浮点索引?如何修复我的分层索引?
实际错误消息是:
TypeError: the label [1.2] is not a proper indexer for this index type (Int64Index)
Run Code Online (Sandbox Code Playgroud)
如果索引级别是单级而不是多索引,Pandas 没有问题:
In [178]:
frame = frame.set_index(['a'])
frame.loc[1.2]
Out[178]:
b v
a
1.2 30 123
1.2 60 1234
Run Code Online (Sandbox Code Playgroud)
如果您确实有多重索引,那么您可以使用索引级别 0(第一个)生成一个掩码,并使用它来选择值:
In [180]:
mask = frame.index.get_level_values(0)
frame.loc[mask == 1.2]
Out[180]:
v
a b
1.2 30 123
60 1234
Run Code Online (Sandbox Code Playgroud)
掩码本身包含每行的所有 0 级值:
In [181]:
mask
Out[181]:
Float64Index([1.2, 1.2, 3.0, 3.0], dtype='float64')
Run Code Online (Sandbox Code Playgroud)
使用名称指定级别更好、更明确:
mask = frame.index.get_level_values('a')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6907 次 |
最近记录: |