2016-03-23 37 views
1

これはピンダウンするのが難しいですが、pandas.read_excelのスプレッドシートから読み取られたデータフレームでマルチインデックスを使用できないようです。私はGistスプレッドシートからDataFrameのMultiIndexにアクセスする際にエラーが発生しました

df = pd.read_excel('small.xlsx') 
df.set_index(['qrsid','locus'], inplace=True) 
print(('dkdkd', 'kdkd') in df.index) 

パンダプリミティブから作成されたマルチインデックスが正常に動作して私ができる

df = pd.DataFrame({'qrsid':['qb210', 'qb210', 'qb210', 'qb210', 'qb210'], 
       'locus':['gag','gag','gag','gag','gag'], 
       'dpi': [ 800, 1002, 2291, 4444, 212]}) 
df.set_index(['qrsid','locus'], inplace=True) 
print(('dkdkd', 'kdkd') in df.index) 

、エラー、

Traceback (most recent call last): 
    File "mindex.py", line 14, in <module> 
    print(('dkdkd', 'kdkd') in df.index) 
    File "/path/venv/local/lib/python2.7/site-packages/pandas/indexes/multi.py", line 947, in __contains__ 
    self.get_loc(key) 
    File "/path/venv/local/lib/python2.7/site-packages/pandas/indexes/multi.py", line 1538, in get_loc 
    if lead_key else (0, len(self))) 
    File "/path/venv/local/lib/python2.7/site-packages/pandas/indexes/multi.py", line 1444, in slice_locs 
    return super(MultiIndex, self).slice_locs(start, end, step, kind=kind) 
    File "/path/venv/local/lib/python2.7/site-packages/pandas/indexes/base.py", line 2879, in slice_locs 
    start_slice = self.get_slice_bound(start, 'left', kind) 
    File "/path/venv/local/lib/python2.7/site-packages/pandas/indexes/multi.py", line 1415, in get_slice_bound 
    return self._partial_tup_index(label, side=side) 
    File "/path/venv/local/lib/python2.7/site-packages/pandas/indexes/multi.py", line 1460, in _partial_tup_index 
    raise TypeError('Level type mismatch: %s' % lab) 
TypeError: Level type mismatch: dkdkd 

類似したデータフレームを生成して、すべてのファイルを配置しました2つのデータフレーム間で何が異なるかを把握していない。どちらも同じdf.dtypesです。両方とも同じ外観になるdf.index。誰が最初のインデックスのインデックスにアクセスできないのか教えていただけますか?


$ python --version 
Python 2.7.6 
$ python -c 'import pandas; print pandas.__version__' 
0.18.0 

答えて

0

私はこれが今なぜ起こるか私が知っていると思います。私はpandas.indexes.base.Index.is_type_compatible

is_type_compatible: kind=string inferred_type=unicode 

で比較されているタイプは、だから、明らかにpandas.read_excel()がUnicodeとして文字列を読んでいると、それらは型互換性のないシンプルな「文字列」としているプリントアウト。

ここでのインデックスエラーメッセージは、より多くの情報を提供します。単に「レベルタイプの不一致」と言っても、ほとんど役に立たない情報が得られます。

関連する問題