복붙노트

[PYTHON] Pandas : dtype 'object'를 int로 변환합니다.

PYTHON

Pandas : dtype 'object'를 int로 변환합니다.

나는 Pandas로 SQL 질의를 읽었으며, 문자열, 날짜 및 정수 임에도 불구하고 dtype 'object'로 값이 들어옵니다. 나는 Pandas datetime dtype으로 'object'날짜를 변환 할 수 있지만 문자열과 정수를 변환하려고하면 오류가 발생합니다.

다음은 그 예입니다.

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

해결법

  1. ==============================

    1.@piRSquared에 의한 의견을 바탕으로 나를 위해 일한 답을 문서화하십시오.

    @piRSquared에 의한 의견을 바탕으로 나를 위해 일한 답을 문서화하십시오.

    먼저 문자열로 변환 한 다음 정수로 변환해야했습니다.

    >>> df['purchase'].astype(str).astype(int)
    
  2. ==============================

    2.간단 해

    간단 해

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

    예:

    레이블, 유니크 = pd.factorize ([ 'b', 'b', 'a', 'c', 'b'])

    라벨 배열 ([0, 0, 1, 2, 0])

    유일한 배열 ([ 'b', 'a', 'c'], dtype = 객체)

  3. ==============================

    3.이 차례를 따라라:

    이 차례를 따라라:

    1. 파일을 청소하십시오 -> CSV 형식으로 데이터 파일을 열고 "?" 빈 장소 대신에 모든 것을 지우십시오.

    누락 된 값을 포함하는 행을 삭제합니다. 예 :

    df.dropna(subset=["normalized-losses"], axis = 0 , inplace= True)
    

    3. 변환을 위해 지금 astype 사용

    df["normalized-losses"]=df["normalized-losses"].astype(int)
    

    참고 : 여전히 프로그램에서 오류를 발견 한 다음 CSV 파일을 다시 검사하고 Excel에서 열어 "?" 원하는 열에서 삭제 한 다음 파일을 저장하고 돌아가서 프로그램을 실행하십시오.

    코멘트 성공! 작동한다면. :)

  4. from https://stackoverflow.com/questions/39173813/pandas-convert-dtype-object-to-int by cc-by-sa and MIT license