본문 바로가기

데이터분석/pandas

pandas dataframe 문자열 칼럼 숫자형(int,float)으로 변환

pandas Dataframe 에서 문자열 칼럼을 숫자형으로 바꿔야할 때가 종종 있습니다. 

그 때 쓰는 메서드는 보통 

 

pd.to_numeric() 

dataframe.astype()

 

이렇게 2가지가 있습니다. 

하나하나 살펴보겠습니다.

 

1) to_numeric()

 

시리즈 데이터를 하나 만들었습니다.  여기에 pd.to_numeric( ) 을 하겠습니다.

시리즈 데이터로 넣었더니,  타입이 int 로 만들어진 것을 확인할 수 있습니다. 

근데, 만약에 dataframe으 모든 칼럼을 숫자형으로 바꾸고 싶다면 어떨까요? 

이 때는 apply 라는 메서드를 통해서 사용합니다. 

 

apply 메서드에 대해 잠깐 살펴보겠습니다. 

 

apply 메서드 안에는 커스텀함수나 기존의 메서드들을 인자로 넣어주시면 됩니다. 

한 칼럼의 최대값과 최소값의 차이를 리턴해주는 커스텀 함수 f 를 만들었구요. 

데이터프레임에 apply 를 썼더니 모든 칼럼에 f 함수가 적용된 것을 볼 수 있습니다.

 

기본적으로 apply 는 칼럼을 중심으로 함수가 적용되는데 만약 인덱스별로 (가로로) 함수가 적용되게 하고 싶다면

axis='columns' 라는 인자를 넘기면 각 로우에 대해 한 번씩 함수를 수행합니다. 

 

자, 다시 to_numeric 으로 넘어오겠습니다. 

 

dataframe통째로 apply를 적용할 수 있지만, 위에서 보는 것처럼 특정 칼럼만 지정해서 to_numeric을 쓸 수도 있습니다.

통째로 적용하고 싶다면 데이터프레임의 변수명을 그대로 apply 앞에 적어주시고 메서드를 실행시켜주면 됩니다. 

참고로, apply 메서드 안에는 커스텀 함수가 아닌 pandas 에 있는 to_numeric 을 적어주었습니다.

커스텀 함수는 기존 만들어진 함수든 같은 '함수'라는 사실임을 헷갈리지 마시길! 

 

2) astype() 

개인적으로 astype을 좀 더 선호하는데 뭔가 명시적으로 타입을 지정해주는 게 더 낫다고 생각하기 때문입니다. 

사용법은 앞에서 to_numeric 쓰는 법과 비슷합니다. 

astype은 그냥 단독으로 쓰고 타입만 인자로 전달해주면 되서 좀 덜 헷갈리는 느낌입니다. (제 기준입니다) 

또한, 각 칼럼별 타입을 위와 같이 딕셔너리형태로 지정해줄 수도 있습니다. 

 

 

이상 포스팅을 마치겠습니다 :)

 

위 실습 파일은 아래 깃허브에 올려놓았습니다. 

 

https://github.com/JangDaehyuk/basic_data_analysis_tip/blob/master/to_numeric%20astype%20apply%20sample.ipynb

 

----------------참고 출처----------------

 

https://rfriend.tistory.com/470

 

[Python pandas] DataFrame의 문자열 칼럼을 숫자형으로 바꾸기 : pd.to_numeric(), DataFrame.astype()

이번 포스팅에서는 Python pandas DataFrame 이나 Series 내 문자열 칼럼을 숫자형으로 변환(how to convert string columns to numeric data types in pandas DataFrame, Series) 하는 2가지 방법을 소개하겠습니..

rfriend.tistory.com

https://data-make.tistory.com/123

 

[Python] DataFrame 그룹 함수 적용 - map,apply,applymap

참고글 : [Python] 사용자 정의 함수 및 적용 함수(def, lambda, map) # test Data df1 = DataFrame({'a':[1,3,7,4],'b':[17,86,52,68],'c':[134,874,592,246]}) 1. map 함수 - map(func, **iterable) - 1차원 원..

data-make.tistory.com