본문 바로가기
판다스/판다스 팁

[pandas] 데이터 프레임에서 큰 숫자를 가독성 좋게 표기하기

by 김판다t 2023. 5. 26.

판다스의 데이터 프레임에서 큰 숫자의 가독성을 개선하는 방법

데이터 분석을 하다 보면 대규모 데이터셋에서 큰 숫자를 다루게 되는 경우가 많습니다. 특히, 숫자가 크면 클수록 값을 직관적으로 이해하기 어려워지기에, 가독성을 높이는 것이 중요합니다. 이번 글에서는 데이터 프레임에서 큰 숫자를 좀 더 가독성 좋게 표기하는 방법을 알아보고자 합니다.

 

Example Code

 

import pandas as pd
data = {'일련번호':[2101, 2102, 2103], 
        '금액':[123000000, 456000000, 1230000000]}
df = pd.DataFrame(data)

 

df

 


Problem

예시 데이터 프레임은 금액 열에 큰 숫자가 포함되어 있어 가독성이 떨어집니다.

이를 개선하기 위해 금액 열의 숫자 형식을 변경하여 더 쉽게 읽을 수 있도록 표현하겠습니다.



 

해결책 1: 수치형 데이터를 문자열로 변환하기

 

파이썬에서는 숫자를 세 자리마다 콤마가 삽입된 문자열로 변환할 수 있습니다.

# 숫자를 세 자리마다 콤마가 적용된 문자열로 변환하는 파이썬 기법
a = 123000000
'{:,}'.format(a)
'123,000,000'

 

 

판다스의 apply 또는 map 함수를 사용하면 시리즈의 각 셀에 파이썬 함수나 기법을 적용할 수 있습니다. 이를 통해 금액 열의 숫자를 세 자리마다 콤마가 적용된 문자열로 변환할 수 있습니다.

# 시리즈의 각 셀에서 숫자를 세 자리마다 콤마가 적용된 문자열로 변환
df['금액'].apply('{:,}'.format)
0      123,000,000
1      456,000,000
2    1,230,000,000
Name: 금액, dtype: object

 

 

위의 결과로 금액 열을 수정하면 세 자리마다 콤마가 삽입된 문자열을 얻을 수 있지만, 이 방식은 기존의 수치형 데이터가 문자열로 변환되는 단점이 있습니다. 이를 피하려면 열을 수정할 때 assign 함수를 사용하여 원본 수치 데이터는 원본(df)에서 유지되도록 하는 것이 좋습니다. 

# assign 함수로 열 수정하기 (df를 덮어쓰지 않음)
df.assign(금액=df['금액'].apply('{:,}'.format))

 

 


해결책 2: 데이터의 형식은 유지하고 표시만 변경하기 

데이터 자체는 수치형으로 그대로 유지하면서 표시 형식만 변경하고자 한다면 style.format 함수를 활용할 수 있습니다.

 

2-1. 매개변수 thousands를 사용하여 콤마 삽입

 

매개변수 thousands를 활용하면 세 자리마다 콤마를 부여할 수 있습니다.

# style.format + 매개변수 thousand로 각 자리수에 콤마를 지정
df.style.format(thousands=',')

다만, 이 방식은 데이터 프레임 전체에 콤마를 적용하므로, 일련번호 열에도 콤마가 삽입되는 단점이 있습니다.

 

 

2-2. 매개변수 formatter를 사용하여 특정 열에만 콤마 삽입

 

특정 열에만 숫자 형식을 적용하고자 한다면 매개변수 formatter를 사용할 수 있습니다.

# style.format + 매개변수 formatter로 특정 열만 지정한 숫자 표기를 적용
df.style.format(formatter={'금액':'{:,}'.format})

 

2-3. 과학적 표기법으로 변환하기

 

꼭 콤마 표기를 사용할 필요는 없습니다. 경우에 따라 과학적 표기법이 더 적합할 수 있습니다. 물론 이 경우에도 금액 열만 변환해야 하므로 매개변수 formatter를 사용해야 합니다.

# 금액 열을 과학적 표기법(예: 1.23 × 10^4)으로 표시
df.style.format(formatter={'금액':'{:.2e}'.format})

 

2-4. 사용자 정의 포맷 적용하기

 

특정 단위로 숫자를 표기해야 하는 경우에는 사용자 정의 포맷을 사용할 수 있습니다. 예를 들어, 금액을 억 단위로 표기할 수 있습니다.

# 금액 열을 억 단위(예: 1.23억)로 표시
fmt = lambda x: '{:.2f}억'.format(x/(10**8))
df.style.format(formatter={'금액':fmt})

 

또는 열 이름에 단위를 표시하고, 숫자는 억 단위로 표기할 수도 있습니다. 이 방법은  style.format 함수가 필요하지 않습니다.

# 금액을 1억으로 나누고, 열 이름에 '억' 단위를 추가
df.assign(금액=df['금액'].div(10 ** 8)).rename({'금액': '금액(억)'}, axis=1)

 

2-5. 값의 크기에 따른 색상 부여하기

 

값의 크기를 시각적으로 구분하는 것이 목적이라면, 색상을 활용하는 것도 한 가지 방법입니다.

# 금액 열에 Reds 계열의 그라디언트 색상을 배경으로 적용
df.style.background_gradient(cmap='Reds', subset=['금액'])

 

 

위에서 설명한 여러 방법들을 통해 데이터 프레임에서 큰 숫자의 가독성을 높일 수 있습니다. 상황에 맞는 적절한 방법을 선택하여 데이터를 보다 직관적으로 표현할 수 있습니다.


판다스 책이 출판되었습니다.

 

유튜브에서 판다스 강의 중입니다.

https://www.youtube.com/@KimPandas