2017-09-04 15 views
0

.locを使用してCategoricalIndexベースのPandasデータフレームの行にアクセスしようとしていますが、TypeErrorが表示されます。最小実施例は、私が取得し13 .loc PandasのCategoricalIndex用

df.loc[13] 

としてラベルに対応する行にアクセスしように、そして

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') 

あろう

TypeError: cannot do label indexing on <class 'pandas.core.indexes.category.CategoricalIndex'> with these indexers [13] of <class 'int'> 

13 in df.index 
にもかかわらず

Trueである。

df.index.get_loc(13) 

で13のインデックスを最終的に得ることができますが、なぜ上記の簡単なアプローチが機能しないのですか?私は何が欠けていますか?

乾杯。私にとって

+1

これはあなたの場合は、現在、整数ベースCategoricalIndicesのために実装されていない何かのように見えますカテゴリは文字/文字列に基づく'' a '、' b '、' c ''df.loc [' a ']'が動作します。これは現在制限されているようです – EdChum

答えて

1

作業:

print (df.loc[pd.CategoricalIndex([13])]) 
       foo 
future_index  
13    2 

でもあれば、それは素敵な作業EdChum述べたようにstrに変換する:

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 
関連する問題