2016-02-02 21 views
5

Ho un dataframe Panda con due indiciChange Pandas indice tipo di dati su MultiIndex

       Column1 
indexA indexB       
1001  aaa      1 
     bbb      1 
     ccc      1 
     ddd      1 

creati da

pd.read_sql(sql=sql, index_col=['indexA', 'indexB']) 

MySQL sta leggendo in indexB come unicode e vorrei convertirlo in una stringa . Il mio obiettivo è di ruotare la tabella e inserire le voci in indexB come nomi di colonne. Quando faccio questo con i valori Unicode Ottengo i seguenti nomi di colonna:

� � � � � � � � � 

durante l'esecuzione

pd.read_sql(sql=sql, index_col=['indexA', 'indexB']).unstack().fillna(0) 

EDIT: Un commento ha suggerito il seguente:

df = pd.read_sql(sql) 
df['indexB'] = df['indexB'].astype(str) 
df = df.set_index(('indexA', 'indexB'), drop=True) 

che è un bel lavoro intorno al mio problema (grazie). Sarebbe bello sapere se questo può essere fatto durante l'inizializzazione.

+0

Hai provato 'df ['indexB'] = df ['indexB']. Astype (str)'? –

+1

Non penso che tu possa accedere a indici del genere. Il precedente ritorna 'KeyError:' indexB'' – Sal

+2

Giusto, scusa, avresti bisogno di 'df = pd.read_sql (sql); df ['indexB'] = df ['indexB']. astype (str); df = df.set_index (('indexA', 'indexB'), drop = True)) ' –

risposta

0

l'indice può essere ripristinato prima di modificare il tipo.

df= df.reset_index() 
df['indexB'] = df['indexB'].astype(str) 
Problemi correlati