2016-07-27 21 views
2

ich Pandas Datenrahmen mit einem dreistufigen Multiindex habe, der wie folgt aussieht:einen Pandas Datenrahmen mit einem String-Typ umwandeln, drei Ebene Multiindex in numerischen Typ-Objekte

gene   TIMP2  VEGFA  VIM 
2 TGFb 0.1 0.035655 0.876214 -0.158406 
     1 0.087623 1.049764 0.039158 
     10 0.054119 0.887348 -0.052608 
24 TGFb 0.1 0.148470 0.565379 0.157153 
     1 0.233250 0.540806 0.206030 
     10 0.378658 0.861429 0.132580 
48 TGFb 0.1 -0.203006 0.359409 -0.144209 
     1 -0.068495 0.845802 -0.093910 
     10 -0.105295 0.676591 -0.166819 
6 TGFb 0.1 0.060129 1.766071 0.097548 
     1 0.075760 1.656494 0.026664 
     10 -0.029685 1.284003 -0.008032 
    NaN NaN 2.000000 12.000000 0.000000 

Das einzige Problem ist, dass wegen der Art und Weise Ich habe den MultiIndex gebaut (der in größeren Code eingebettet ist, so dass es schwierig ist, ihn hier einzufügen), die Zahlen im Index sind Strings. Wie konvertiere ich die äußere Ebene in Integer und die innere Ebene in Float? Es klingt trivial, aber ich habe große Schwierigkeiten, die Lösung zu finden. Dank

+0

Könnten Sie den dtype auf numerische bevor sie als die Indizes der Einstellung nicht konvertieren? Das Problem hier ist, dass der Multi-Index wahrscheinlich alphabetisch und nicht numerisch sortiert ist. Selbst wenn Sie sie jetzt überschreiben, werden Sie unerwartetes Verhalten bekommen, wenn Sie die Scheibe schneiden. – EdChum

Antwort

0

Dies sollte es für Sie tun:

df.index = df.index.set_levels(idx.levels[0].astype(int), level=0) \ 
        .set_levels(idx.levels[2].astype(float), level=2) 
+0

Das ist, was ich suche. Danke (nochmal =]) – CiaranWelsh