[Python pandas] DataFrame에서 천 단위 숫자의 자리 구분 기호 콤마(',')를 없애는 방법
Python 분석과 프로그래밍/Python 데이터 전처리 2019. 7. 30. 00:16이번 포스팅에서는 Python pandas DataFrame의 숫자형 변수에서 천 단위 숫자의 자리 구분 기호인 콤마(',')를 없애는 2가지 방법을 소개하겠습니다.
예제로 사용할 데이터셋은 Wikipedia 에서 찾은 per capita nominal GDP for countries 2018년도 국가별 1인당 소득수준 (단위: US$) 데이터입니다. 아래의 데이터 캡쳐해놓은 그림처럼 1인당 소득수준(US$)의 숫자에 천 단위 자리 구분 기호로 콤마(comma, ',')가 들어있는데요, 이게 웹사이트나 엑셀에서 눈으로 보기에는 가독성이 좋습니다만, 분석을 할 때는 숫자형으로 인식을 하지 않고 문자열로 인식을 한다든지, 콤마(',')를 칼럼 구분자로 잘못 인식을 한다든지 해서 문제를 야기할 수 있습니다. 이에 천 단위 자리수 구분 기호 콤마(',' comma)를 없애는 2가지 방법을 소개하겠습니다.
(1) pd.read_csv() 에서 thousands = ',' 옵션으로 천 단위 자리수 구분 콤마 없애고 불러오기
(2) DataFrame의 문자열 DataFrame.column.str.replace(',', '').astype('int64') 메소드를 이용하여 변환하기
(3) PostgreSQL, Greenplum DB에서 천 단위 자리수 구분 콤마 없애기
per_capita_GDP_for_countries.txt
(1) pd.read_csv() 에서 thousands = ',' 옵션 설정하여 |
원천 데이터를 pd.read_csv() 함수로 불러올 때 천 단위 구분 기호를 신경 안쓰고, 데이터 경로와 구분자(탭, delimiter = '\t') 정도만 설정해주고 불러오면 아래처럼 'USD' 칼럼에 숫자가 천 단위마다 구분 기호 콤마(',')가 포함되어 있습니다.
In [1]: import pandas as pd In [2]: import os In [3]: base_dir = 'D:/admin/Documents/' In [4]: file_nm = 'per_capita_GDP_for_countries.txt' In [5]: data_dir = os.path.join(base_dir, file_nm) In [6]: per_capita_1 = pd.read_csv(data_dir, delimiter = '\t') In [7]: per_capita_1.head(10) Out[7]: Rank Country/Territory USD 0 1 Luxembourg 114,234 1 2 Switzerland 82,950 2 2 Macau 82,388 3 3 Norway 81,695 4 4 Ireland 76,099 5 5 Iceland 74,278 6 6 Qatar 70,780 7 7 Singapore 64,041 8 8 United States 62,606 9 9 Denmark 60,692 |
이번에는 pd.read_csv() 함수에 thousands = ',' 라는 옵션을 추가해서 불어와 보겠습니다. 'USD' 칼럼에 천 단위 자리 구분 기호가 없어졌습니다. 아무래도 나중에 두번일 안하려면 데이터 불러올 때 부터 신경을 쓰는게 좋겠지요?!
In [8]: per_capita_2 = pd.read_csv(data_dir, delimiter = '\t', thousands = ',') In [9]: per_capita_2.head(10) Out[9]: Rank Country/Territory USD 0 1 Luxembourg 114234 1 2 Switzerland 82950 2 2 Macau 82388 3 3 Norway 81695 4 4 Ireland 76099 5 5 Iceland 74278 6 6 Qatar 70780 7 7 Singapore 64041 8 8 United States 62606 9 9 Denmark 60692 |
(2) DataFrame의 문자열 df.column.str.replace(',', '').astype('int64') 메소드를 |
이번에는 '소 잃고 외양간 고치기' 방법이 되겠습니다. -_-;
먼저, 'USD' 칼럼의 천 단위 구분 기호 콤마 ','를 그대로 불러왔던 첫번째의 'per_capita_1' DataFrame의 칼럼별 data type을 살펴보겠습니다. 'USD' 칼럼이 'object'로 되어있습니다. (정수형 integer 가 아닙니다!)
In [10]: per_capita_1.dtypes Out[10]: Rank int64 Country/Territory object USD object |
이제 문자열(string)의 replace() 메소드를 이용해서 콤마(',')를 비어있는 '' 로 변경(replace)하고, 데이터 형태를 정수형(integer64)로 지정(astype('int64')해보겠습니다. 애초 'USD' 칼럼이 'object' 형태였다면, str.replace(',', '').astype('int64')로 새로 만든 'USD_2' 칼럼은 'int64' 형태로 천 단위 숫자 구분 기호 콤마 없이 잘 들어가 있습니다.
In [11]: per_capita_1['USD_2'] = per_capita_1.USD.str.replace(',', '').astype('int64') In [12]: per_capita_1.dtypes Out[12]: Rank int64 Country/Territory object USD object USD_2 int64 dtype: object In [13]: per_capita_1.head(10) Out[13]: Rank Country/Territory USD USD_2 0 1 Luxembourg 114,234 114234 1 2 Switzerland 82,950 82950 2 2 Macau 82,388 82388 3 3 Norway 81,695 81695 4 4 Ireland 76,099 76099 5 5 Iceland 74,278 74278 6 6 Qatar 70,780 70780 7 7 Singapore 64,041 64041 8 8 United States 62,606 62606 9 9 Denmark 60,692 60692 |
(3) PostgreSQL, Greenplum DB 에서 천 단위 구분 기호 콤마(',') 없애는 방법 |
DB에서도 천 단위 구분 기호 콤마가 골치거리인건 마찬가지이죠. 아래 SQL query 참고하세요.
SELECT replace(column_name, ',', '')::numeric FROM table_name |
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. :-)