我正在尝试使用 .loc 访问基于 CategoricalIndex 的 Pandas 数据框的行,但我得到了一个TypeError. 一个最小的非工作示例是
import pandas as pd
df = pd.DataFrame({'foo': rand(3), 'future_index': [22, 13, 87]})
df['future_index'] = df['future_index'].astype('category')
df = df.set_index('future_index')
Run Code Online (Sandbox Code Playgroud)
然后,在尝试访问与标签 13 对应的行时
df.loc[13]
Run Code Online (Sandbox Code Playgroud)
我得到
TypeError: cannot do label indexing on <class 'pandas.core.indexes.category.CategoricalIndex'> with these indexers [13] of <class 'int'>
Run Code Online (Sandbox Code Playgroud)
尽管
13 in df.index
Run Code Online (Sandbox Code Playgroud)
正在True。我知道我最终可以获得 13 的索引
df.index.get_loc(13)
Run Code Online (Sandbox Code Playgroud)
但是,为什么上述更简单的方法不起作用?我错过了什么?
干杯。
对我来说工作:
print (df.loc[pd.CategoricalIndex([13])])
foo
future_index
13 2
Run Code Online (Sandbox Code Playgroud)
但如果转换为str前面提到的EdChum,效果会很好:
df = pd.DataFrame({'foo': [1,2,3], 'future_index': [22, 13, 87]})
df['future_index'] = df['future_index'].astype(str).astype('category')
df = df.set_index('future_index')
print (df)
print (df.loc['13'])
foo 2
Name: 13, dtype: int64
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |