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
Zgaduję, spróbuj 'df [ 'zakupu']. Astype (str) .astype (int) ' – piRSquared
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
@piRSquared - tak, to zadziałało. – cyril