2016-08-26 8 views
12

팬더에 대한 SQL 쿼리를 읽었으며 값이 문자열, 날짜 및 정수 임에도 dtype 'object'로 전달됩니다. 나는 Pandas datetime dtype으로 'object'날짜를 변환 할 수 있지만 문자열과 정수를 변환하려고하면 오류가 발생합니다. 작동하는 날짜에 df['date'] 변환Pandas : dtype 'object'를 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 

: 여기

은 예입니다

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

참고 :을 시도하면 비슷한 오류가 발생합니다.

문자열로 변환하려고하면 아무 일도 일어나지 않습니다.

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

레이블을 반환합니다. astype (STR) .astype (int)' – piRSquared

+2

문자열 dtype이 없습니다. 그것은 객체로 남아 있습니다. 다른 하나는 더 일반적인'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] 

인수 분해 개체 열 간단하고 새로운 정수 내가 [ '구매']`안양 시도 같은데요

관련 문제