wake-up-neo.com

pandas - Ändere df.index von float64 in Unicode oder String

Ich möchte einen Dataframes-Index (Zeilen) von float64 in einen String oder Unicode ändern. 

Ich dachte, das würde funktionieren, aber anscheinend nicht:

#check type
type(df.index)
'pandas.core.index.Float64Index'

#change type to unicode
if not isinstance(df.index, unicode):
    df.index = df.index.astype(unicode)

fehlermeldung:

TypeError: Setting <class 'pandas.core.index.Float64Index'> dtype to anything other than float64 or object is not supported
38
Boosted_d16

Sie können es so machen:

# 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)

Warum würden Sie anders vorgehen als wenn Sie von int in float konvertieren würden, ist dies eine Besonderheit von numpy (der Bibliothek, auf der Pandas basieren).

Jedes numpy-Array hat ein dtype, bei dem es sich im Wesentlichen um den machine - Typ seiner Elemente handelt. Auf diese Weise behandelt numpy direkt native Typen , nicht Python-Objekte es ist so schnell Wenn Sie also den dtype von int64 in float64 ändern, wandelt numpy jedes Element im C-Code um.

Es gibt auch einen speziellen dtype: object, der im Grunde einen Zeiger auf ein Python-Objekt gibt.

Wenn Sie Strings wollen, müssen Sie daher den object dtype verwenden. Wenn Sie jedoch .astype(object) verwenden, erhalten Sie nicht die gewünschte Antwort: Stattdessen wird ein Index mit object dtype erstellt, aber Python-Float-Objekte werden eingefügt.

Hier konvertieren wir den Index mithilfe von map in Strings mit der entsprechenden Funktion: numpy ruft die Stringobjekte ab und versteht, dass der Index einen object dtype haben muss, da dies der einzige dtype ist, der Strings aufnehmen kann.

56
Arthur

Für Python 3 und Pandas 0.19 oder spätere Versionen fand ich die folgenden Funktionen für mich gut

    # Python 3 (pandas 0.19 or latter versions)
    df.index.astype(str, copy = False)
1
Chia-Yu Chien