si può fare in questo modo:
# for Python 2
df.index = df.index.map(unicode)
# for Python 3 (the unicode type does not exist and is replaced by str)
df.index = df.index.map(str)
Per quanto riguarda il motivo per cui si dovrebbe procedere diversamente da quando convertirai da int a float, questa è una particolarità di numpy (la libreria su cui pandas si basa).
Ogni serie NumPy ha un DTYPE, che è sostanzialmente il macchina tipo dei suoi elementi: in questo modo, offerte NumPy direttamente con i tipi nativi, non con oggetti Python, che spiega come sia così veloce . Quindi quando cambi il dtype da int64 a float64, numpy getterà ogni elemento nel codice C.
C'è anche un dtype speciale: oggetto, che fondamentalmente fornisce un puntatore verso un oggetto Python.
Se si desidera utilizzare le stringhe, è necessario utilizzare l'oggetto dtype . Ma usare .astype(object)
non ti darebbe la risposta che stavi cercando: avrebbe invece creato un indice con oggetto dtype, ma inserire oggetti float Python all'interno.
Qui, utilizzando carta, convertiamo l'indice per stringhe con l'apposita funzione: NumPy di ottenere gli oggetti stringa e capire che l'indice deve avere un oggetto DTYPE, perché questo è l'unico DTYPE che può ospitare stringhe.
Questo non funziona su Python 3.5. Hai qualche idea del perché? –
Il poster originale stava usando Python 2. il tipo 'unicode' non esiste più in Python 3, e il tipo 'str' deve essere usato al suo posto (in pratica, ciò che veniva chiamato' str' in Python 2 è chiamato 'bytes' in Python 3 e 'unicode' sono diventati' str'). Vedere [questa domanda] (http://stackoverflow.com/questions/19877306/nameerror-global-name-unicode-is-not-defined-in-python-3) per ulteriori informazioni. – Arthur