Sie können es auf diese Weise tun:
# 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)
Was, warum Sie gehen würde Anders als bei der Konvertierung von int in float ist das eine Besonderheit von numpy (der Bibliothek, auf der pandas basiert).
Jedes numpy Array hat eine dtype, die im Grunde die Art seiner Elemente Maschine ist: auf diese Weise, numpy Angebote direkt mit einheimischen Arten, nicht mit Python-Objekte, die erklärt, wie es so schnell ist, . Wenn Sie den dtype von int64 in float64 ändern, wird numpy jedes Element in den C-Code umwandeln.
Es gibt auch einen speziellen dtype: Objekt, die im Grunde einen Zeiger auf ein Python-Objekt bieten wird.
Wenn Sie Zeichenfolgen wollen, müssen Sie also das Objekt dtype verwenden. Aber die Verwendung von .astype(object)
würde Ihnen nicht die Antwort geben, nach der Sie gesucht haben: Sie würde stattdessen einen Index mit Objekt dtype erstellen, aber Python-Float-Objekte einfügen.
Hier auf der Karte verwenden, wandeln wir den Index in Strings mit der entsprechenden Funktion: numpy die String-Objekte bekommt und verstehen, dass der Index einen Objekt dtype haben muss, denn das ist die einzige dtype ist, die Strings empfangen kann.
Dies funktioniert nicht auf Python 3.5. Hast du eine Ahnung warum? –
Das ursprüngliche Poster verwendete Python 2. Der 'Unicode' Typ existiert nicht mehr in Python 3 und stattdessen muss der' str' Typ verwendet werden (im Grunde heißt das, was in Python 2 'str' genannt wurde,' Bytes' in Python 3 und "Unicode" wurden ebenfalls zu "str". Siehe [diese Frage] (http://stackoverflow.com/questions/19877306/nameerror-global-name-unicode-is-not-defined-in-python-3) für weitere Informationen. – Arthur