如何处理由熊猫中的浮点数索引的数据

jb.*_*jb. 6 python pandas

我使用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)

EdC*_*ica 4

如果索引级别是单级而不是多索引,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)