2016-08-26 2 views
12

Я прочитал SQL-запрос в Pandas и значения входят в dtype 'object', хотя это строки, даты и целые числа. Я могу преобразовать дату 'объект' в datetime datetime pandas, но я получаю сообщение об ошибке при попытке преобразовать строку и целые числа.Pandas: convert dtype 'object' to int

Вот пример:

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

Преобразование df['date'] в DateTime работы:

>>> 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] 

Но я получаю сообщение об ошибке при попытке преобразовать df['purchase'] в целое число:

>>> 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' 

ПРИМЕЧАНИЕ: Я получаю аналогичную ошибку, когда я пытался .astype('float')

И при попытке конвертировать в строку ничего не происходит.

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

Я предполагаю, попробуйте 'ФР [ 'покупки']. Astype (ул) .astype (int) ' – piRSquared

+2

Нет нити string. Он остается объектом. Для другого, попробуйте более общий 'pd.to_numeric (df ['purchase'])', тогда вы можете добавить '.astype (int)', если это успешно. – ayhan

+0

@piRSquared - да, это сработало. – cyril

ответ

24

Документирование ответа, который работал для меня на основе комментария @piRSquared.

Мне нужно было сначала преобразовать строку, а затем целое число.

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

Как досадно, чтобы сначала преобразовать в str, затем int! Я не понимаю, почему так. –

-1

Это просто

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

Факторизуем столбец объекта и вернуть новое число меток