2016-03-23 12 views
1

Dies ist schwierig zu pinnen, aber es scheint, dass ich einen Multiindex in einem Datenframe aus einer Kalkulationstabelle mit pandas.read_excel nicht verwenden kann. Ich habe alle Dateien in einem Gist platziertFehler beim Zugriff auf MultiIndex in Dataframe aus Tabelle

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

Erzeugt ein Fehler,

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 

Ein ähnlicher Datenrahmen mit Multi-Index von Pandas Primitiven erstellt funktioniert gut,

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) 

ich kann Finde keine Unterschiede zwischen den beiden Datenrahmen heraus. Beide haben die gleiche df.dtypes. df.index auf beiden sehen identisch aus. Kann mir jemand sagen, warum der Zugriff auf den Index der ersten fehlschlägt?


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

Antwort

0

Ich glaube, ich weiß, warum dies jetzt geschieht. Ich Arten ausgedruckt in pandas.indexes.base.Index.is_type_compatible

is_type_compatible: kind=string inferred_type=unicode 

So wird im Vergleich scheinbar pandas.read_excel() liest Strings als Unicode und solche sind typ unvereinbar mit einfachen ‚Strings‘.

Die Indizierung Fehlermeldung hier könnte viel informativer sein. Wenn Sie mir nur sagen, dass "Level Type Mismatch" fast keine nützlichen Informationen liefert.

Verwandte Themen