반응형

데이터 분석을 하다 보면 pandas를 필수적으로 쓰게 되는데

원본 데이터 값 자체가 양이 많기도 하고 데이터 타입 자체도 통일 성 없이 한 열 값 안에 

int, float, str 타입이 섞여 있기도 한다.

예시데이터

위의 경우 인허가일자와 휴업 일자가 문자열도 섞여있고 중간에 NaN값, 스트링 안에 필요 없는 부호, 빈 값까지..

총체적 난국임을 알 수 있다.  위의 데이터를 pandas를 사용해서 깔끔하게

전부 int(정수)로 변환하여 보겠다.

#예시 데이터 프레임
import pandas as pd
from numpy import NaN, NAN, nan #누락값 넣기 위한 모듈 불러오기

df = pd.DataFrame({'구분':[1,2,3,4,5,6], 
                   '인허가일자':[2016312,'2020.02.01',201603,99991230,1980,192012],
                   '휴업일자':[20160312.0,'2020 320',201603.0,NaN,'2020-02-22','']})
#df = df.set_index('구분')
df

출력:

step1. 빈칸을 NaN으로 채워주기

# 비어 있는 값을 NaN으로 바꾸기
df = df.replace(r'^\s*$',NaN, regex=True)
df

출력:

이렇게 빈 칸을 NaN으로 채워준다.

step 2. NaN을 다른 값으로 변경해주기

#누락값 처리 NaN을 다른 값으로 변경하기
df = df.fillna(0) #다른 값 변경시 .fillna(변경할 숫자).iloc[행위치, 열위치] 입력하여 변경
df

출력:

그러면 NaN값이 0으로 채워짐을 확인할 수 있다.

step3. 문자열을 정수로 변환하기

이제 문자열을 정수로 변환하여야 하는데

우선 스트링 값을 가지는 곳에 특수문자와 공백을 제거 후 

pandas apply를 이용하여 데이터 프레임에 함수를 한 번에 적용해주도록 하겠다.

#문자열을 정수로 변경하기
import re
#string의 특수문자 제거하는 함수
def cleanString(x):
    x1 = ''
    if type(x1) == type(x):
        x = re.sub('[-=.#/?:$}]', '', x) #특수문자 제거
        x1 = x.replace(" ","") #공백제거
        return int(x1)
    else:
        return x

# 인허가일자 str int로 변환하기
df['인허가일자']=df['인허가일자'].apply(cleanString)
# 휴업일자 str int로 변환하기
df['휴업일자']=df['휴업일자'].apply(cleanString)
#휴업일자 float타입을 int로 바꿔주기
df['휴업일자'] =df['휴업일자'].astype('int64')

df

출력:

그럼 이렇게 깔끔하게 모두 정수로 변환이 되었음을 확인할 수 있다. :)

반응형

+ Recent posts