2016-08-26 14 views
12

Przeczytałem zapytanie SQL do Pandy, a wartości przychodzą jako "obiekt" dtype, chociaż są to ciągi, daty i liczby całkowite. Jestem w stanie przekonwertować datę "obiekt" na d ppe typu datetime Pandy, ale otrzymuję komunikat o błędzie podczas próby konwersji ciągu znaków i liczb całkowitych.Pandy: przekonwertuj "obiekt" dtype do int

Oto przykład:

>>> import pandas as pd 
>>> df = pd.read_sql_query('select * from my_table', conn) 
>>> df 
    id date   purchase 
1 abc1 2016-05-22 1 
2 abc2 2016-05-29 0 
3 abc3 2016-05-22 2 
4 abc4 2016-05-22 0 

>>> df.dtypes 
id   object 
date  object 
purchase object 
dtype: object 

Konwersja df['date'] do datetime działa:

>>> pd.to_datetime(df['date']) 
1 2016-05-22 
2 2016-05-29 
3 2016-05-22 
4 2016-05-22 
Name: date, dtype: datetime64[ns] 

Ale pojawia się błąd podczas próby przekształcenia df['purchase'] do liczby całkowitej:

>>> df['purchase'].astype(int) 
.... 
pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)() 
pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)() 

TypeError: long() argument must be a string or a number, not 'java.lang.Long' 

UWAGA: podobny błąd wystąpił podczas próby .astype('float')

A gdy próbuje się przekonwertować na ciąg znaków, nic się nie dzieje.

>>> df['id'].apply(str) 
1 abc1 
2 abc2 
3 abc3 
4 abc4 
Name: id, dtype: object 
+2

Zgaduję, spróbuj 'df [ 'zakupu']. Astype (str) .astype (int) ' – piRSquared

+2

Brak typu dtype. Pozostaje jako obiekt. Dla drugiego spróbuj bardziej ogólnego 'pd.to_numeric (df ['purchase'])', możesz dodać '.astype (int)' jeśli to się uda. – ayhan

+0

@piRSquared - tak, to zadziałało. – cyril

Odpowiedz

24

Dokumentowanie odpowiedzi, która działała dla mnie na podstawie komentarza @piRSquared.

Potrzebowałem najpierw przekonwertować na ciąg, a następnie na liczbę całkowitą.

>>> df['purchase'].astype(str).astype(int) 
+1

Jak denerwujące, aby najpierw przekonwertować na str, a następnie int! Nie rozumiem, dlaczego tak jest. –

-1

To proste

pd.factorize(df['purchase'])[0] 

na czynniki kolumna obiekt i zwraca nowy całkowitą etykiet

Powiązane problemy