-
[Pandas] 판다스 데이터프레임을 읽을 때, thousands 패러미터로 숫자 구분자 콤마를 빼보자Python/Pandas, Numpy 2023. 5. 18. 10:15반응형
판다스 데이터프레임을 읽을 때, thousands 패러미터로 숫자 구분자 콤마를 빼보자
파이썬(Python)에서 데이터를 읽을 때, 가끔씩 숫자인줄 알고 처리했던 데이터가 알고 보니 문자였던 경험이 있을겁니다. 이번에는 그런 상황 중 하나인 숫자 구분자를 처리하는 방법에 대해 알아볼텐데요, 흔히 천 단위로 숫자에 표기하는 구분자 콤마(comma, 반점, ',')를 판다스 데이터프레임(Pandas DataFrame)에서 제거하는 방법을 한번 살펴보겠습니다.
숫자를 표기할 때, 우리는 흔히 천 단위로 콤마를 찍습니다. 1만을 아라비아 숫자로 적는다고 하면, 대개 10,000 으로 표기하는 방식이죠. 외국에도 온점('.')을 찍느냐 반점(',')을 찍느냐 하는 문화적 차이는 있지만 대개 구분자를 찍어 표기합니다. 이 때문에, 많은 워드프로세서(워드 등의 프로그램)나 스프레드시트(엑셀 등의 프로그램)에서는 사람이 보는 화면에 한해 구분자를 자동으로 보여주도록 서식 기능을 제공하기도 하지요. 하지만, 이런 서식 기능에 무지한 사람들은 숫자를 적어야 하는 필드에 콤마를 포함한 문자를 적어버리는 실수를 하기도 합니다.
예를 들어볼 데이터 하나를 불러와봅시다. 이건 도서관의 책 대출 데이터인데요, 대출권수 열(column)를 살펴보면 3,433 과 같이 숫자 구분자 콤마가 포함된 것을 확인할 수 있습니다. 판다스에서는 숫자를 표기할 때 양식 설정을 지원하지 않으므로, 이건 누가 봐도 문자열로 처리된 것이지요. 데이터 작성자는 이러한 특성을 고려해서, 숫자 필드에는 콤마를 제외(콤마가 포함되는 순간 계산이 불가능한 문자열이 됩니다)한 숫자만 적고, 엑셀의 양식 설정을 이용해서 콤마를 표기해야 합니다.
import pandas as pd df = pd.read_excel('./data/BestLoanList.xlsx') df.head()
월 순위 서명 저자 출판사 출판년도 권 ISBN ISBN부가기호 KDC 대출건수 0 1월 1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 NaN 9791165341909 3810.0 813.7 3,433 1 1월 2 완전한 행복 :정유정 장편소설 지은이: 정유정 은행나무 2021 NaN 9791167370280 3810.0 813.7 2,903 2 1월 3 아몬드손원평 장편소설 손원평 창비 2017 NaN 9788936434267 3810.0 813.7 2,769 3 1월 4 불편한 편의점 :김호연 장편소설 지은이: 김호연 나무옆의자 2021 NaN 9791161571188 3810.0 813.7 2,713 4 1월 5 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 2.0 9791165343729 3810.0 813.7 2,605 그러면, 이 데이터를 계산하기 위해서는 대출건수 열을 숫자로 바꿔야 하는데요, 이 때는 크게 두 가지 선택지가 있습니다.
- 문자열을 바꿀 수 있는 패키지 또는 함수를 사용해서 숫자로 변환하기
pd.read_excel
함수의thousands
패러미터 이용하기
전자의 경우에는
re
패키지 또는replace
내장함수를 이용해 콤마를 제거한 뒤, 자료형 번환을 이용해서 숫자로 바꿔주는 방식입니다. 다만, 이렇게 처리한다면 손이 많이 가기 때문에 저는 후자의 방법을 추천드립니다. 판다스의read_excel
함수에서 제공하는 옵션을 이용하는 방식이죠.read_excel
함수에서는thousands
라는 패러미터가 존재하는데, 이건 숫자 구분자를 자동으로 인식해서 제거해 주는 기능을 가지고 있습니다. 이 기능이 적용된 열은 숫자로 데이터가 처리되기 때문에 자료형을 신경쓰지 않아도 된다는 장점이 있지요.위 데이터프레임의 대출건수를 그냥 계산했을 때와, 판다스 데이터프레임으로 불러올 때
thousands
옵션을 사용한 결과를 비교해보면서 이 기능이 어떻게 동작하는지 알아보도록 하겠습니다.# 그냥 불러온 데이터는 구분자 콤마 때문에 문자로 처리되었다 df['대출건수']
0 3,433 1 2,903 2 2,769 3 2,713 4 2,605 ... 1095 1,068 1096 1,067 1097 1,063 1098 1,062 1099 1,061 Name: 대출건수, Length: 1100, dtype: object
# 문자 자료형은 숫자 계산이 불가능 df['대출건수'] + 10
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) ... TypeError: can only concatenate str (not "int") to str
# thousands 패러미터 이용하기 df = pd.read_excel('./data/BestLoanList.xlsx', thousands=',') # 숫자의 콤마 구분자 제거 df.head()
월 순위 서명 저자 출판사 출판년도 권 ISBN ISBN부가기호 KDC 대출건수 0 1월 1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 NaN 9791165341909 3810.0 813.7 3433 1 1월 2 완전한 행복 :정유정 장편소설 지은이: 정유정 은행나무 2021 NaN 9791167370280 3810.0 813.7 2903 2 1월 3 아몬드손원평 장편소설 손원평 창비 2017 NaN 9788936434267 3810.0 813.7 2769 3 1월 4 불편한 편의점 :김호연 장편소설 지은이: 김호연 나무옆의자 2021 NaN 9791161571188 3810.0 813.7 2713 4 1월 5 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 2.0 9791165343729 3810.0 813.7 2605 # thousands 사용 후 정수(int64)로 처리된 대출건수 열 df['대출건수']
0 3433 1 2903 2 2769 3 2713 4 2605 ... 1095 1068 1096 1067 1097 1063 1098 1062 1099 1061 Name: 대출건수, Length: 1100, dtype: int64
# 숫자 자료형은 숫자 계산이 가능 df['대출건수'] + 10
0 3443 1 2913 2 2779 3 2723 4 2615 ... 1095 1078 1096 1077 1097 1073 1098 1072 1099 1071 Name: 대출건수, Length: 1100, dtype: int64
이렇게
thousands
패러미터를 사용하면 파이썬의 다른 복잡한 코드 없이도 숫자 구분자로 인한 자료형 문제를 해결할 수 있습니다. 만약 반점 대신 온점, 또는 띄어쓰기로 숫자 구분자를 사용하는 데이터를 찾았다면thousands
패러미터에 해당 구분자를 지정해 주는 방식으로 활용할 수 있답니다.반응형'Python > Pandas, Numpy' 카테고리의 다른 글
[Pandas] 파이썬 판다스에서 apply 함수 써보기 (0) 2023.07.06 [Pandas] 판다스 merge 함수로 파이썬 데이터프레임 병합하는 방법 (2) 2023.05.17 [ydata-profiling] 파이썬에서 ydata-profiling으로 간편하게 판다스 데이터 분석과 시각화 (0) 2023.05.11