2016-02-12 35 views
23

Chcę zmienić indeks (wiersze) ramek danych z float64 na string lub unicode.pandy - zmień df.indeks z float64 na unicode lub string

myślałem, że to będzie działać, ale najwyraźniej nie: wiadomość

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

błędzie:

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

Odpowiedz

36

można to zrobić w ten sposób:

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

Jak, dlaczego chcesz kontynuować inaczej niż przy konwersji z int na float, jest to cecha numpy (biblioteka, na której oparte są pandy).

Każdy numpy tablica ma dtype, który jest w zasadzie maszyna typ jej elementów: w ten sposób, NumPy oferty bezpośrednio z rodzimych typów, nie z obiektami python, który wyjaśnia, jak to się tak szybko . Więc gdy zmieniasz typ z int64 na float64, numpy będzie rzutował każdy element w kodzie C.

Istnieje również specjalny dtype: obiekt, który zasadniczo dostarcza wskaźnik w kierunku obiektu Python.

Jeśli chcesz sznurki, ty więc trzeba korzystać z obiektu dtype. Ale użycie .astype(object) nie dałoby ci odpowiedzi, której szukałeś: zamiast tego utworzyłby indeks z obiektem dtype, ale umieścił w nim obiekty pływające Python.

Tutaj, za pomocą mapy, możemy przekonwertować indeks na łańcuchy z odpowiedniej funkcji: numpy dostaje obiekty ciągów i zrozumieć, że indeks musi mieć obiekt dtype, ponieważ jest to jedyny dtype które mogą pomieścić sznurki.

+0

To nie działa w Pythonie 3.5. Czy masz jakiś pomysł, dlaczego? –

+2

Oryginalny plakat był w Pythonie 2. Typ 'unicode' już nie istnieje w Pythonie 3, a zamiast tego musi być użyty typ' str' (w zasadzie to, co zostało nazwane 'str' w Pythonie 2 jest nazywane' bajtami' w Python 3 i 'unicode' również stały się' str'). Aby uzyskać więcej informacji, zobacz [to pytanie] (http://stackoverflow.com/questions/19877306/nameerror-global-name-unicode-is-not-defined-in-python-3). – Arthur