Python
[python] pandas 데이터 프레임 특정 열값의 데이터타입 변경하기
wonhwa
2021. 10. 27. 16:49
반응형
데이터 분석을 하다 보면 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
출력:
그럼 이렇게 깔끔하게 모두 정수로 변환이 되었음을 확인할 수 있다. :)
반응형