这很难确定,但似乎我无法在使用pandas.read_excel
的电子表格中读取的数据框中使用多索引。我已将所有文件放在Gist
df = pd.read_excel('small.xlsx')
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
从pandas原语创建的具有多索引的类似数据帧工作正常,
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)
我无法弄清楚两个数据帧之间有什么不同。两者都有相同的df.dtypes
。 df.index
两者看起来完全相同。任何人都可以告诉我为什么访问第一个索引失败?
$ python --version
Python 2.7.6
$ python -c 'import pandas; print pandas.__version__'
0.18.0
答案 0 :(得分:0)
我想我知道为什么会发生这种情况。我在pandas.indexes.base.Index.is_type_compatible
is_type_compatible: kind=string inferred_type=unicode
显然pandas.read_excel()
正在将字符串作为unicode读取,并且这些字符串与简单的&#39;字符串不兼容。
此处的索引错误消息可能是更多信息。只是告诉我&#39;等级类型不匹配&#39;提供几乎没有有用的信息。