수가 일정 자리수 이상 커지면 천단위 콤마를 찍어주는게 가독성이 좋습니다. Python에서는 format이라는 함수를 제공되며 천 단위 구분 기호 외에도 foramt 함수를 활용하여 원하는 형태로 결과를 출력하는 방법을 간단히 소개 하겠습니다.
Format
- 숫자에 천 개의 쉼표 구분 기호 삽입
- 숫자 서식을 백분율로 지정
- 날짜/시간 열을 원하는 형식으로 변경
Thousands Separator (천 단위 쉼표 구분 기호 추가)
(원본 데이터)
import pandas as pd
file_path = 'd:/pylife/pandas/sales.xlsx'
df = pd.read_excel(file_path)
print(df)
(출력 결과)
Country Date Sales Qty. Sales Amount
0 San Francisco, CO 2022-01-18 170 59500
1 Chicago, IL 2022-03-21 810 283500
2 Dalas, TX 2022-05-07 340 119000
3 Los Angeles, CA 2022-03-11 560 196000
4 Seattle, WA 2022-06-02 140 49000
'Sales Amount' 열에 1000 단위 쉼표 구분 기호와 달러 기호를 추가하여 형식을 지정하는 방법을 살펴보겠습니다.
df.loc[:, "Sales Amount_formatted"] ='$'+ df["Sales Amount"].map('{:,.0f}'.format)
파이썬 문자열 형식 구문 '{:,.0f}'.format을 사용하여 숫자에 천 개의 쉼표 구분 기호를 추가합니다. 그런 다음 python의 map()기능을 사용하여 'Sales Amount' 열의 모든 행에 형식을 반복하고 적용합니다.
(출력 결과)
Country Date Sales Qty. Sales Amount Sales Amount_formatted
0 San Francisco, CO 2022-01-18 170 59500 $59,500
1 Chicago, IL 2022-03-21 810 283500 $283,500
2 Dalas, TX 2022-05-07 340 119000 $119,000
3 Los Angeles, CA 2022-03-11 560 196000 $196,000
4 Seattle, WA 2022-06-02 140 49000 $49,000
구문을 로 변경하면 '{:,.2f}'.format소수점 이하 두 자리 숫자가 표시됩니다.
df.loc[:, "Sales Amount_formatted"] ='$'+ df["Sales Amount"].map('{:,.2f}'.format)
Country Date Sales Qty. Sales Amount Sales Amount_formatted
0 San Francisco, CO 2022-01-18 170 59500 $59,500.00
1 Chicago, IL 2022-03-21 810 283500 $283,500.00
2 Dalas, TX 2022-05-07 340 119000 $119,000.00
3 Los Angeles, CA 2022-03-11 560 196000 $196,000.00
4 Seattle, WA 2022-06-02 140 49000 $49,000.00
"Sales Amount" 열이 정수 유형이면 다음 코드를 사용하여 천 개의 쉼표 구분 기호를 추가할 수도 있습니다.
df.loc[:, "Sales Amount_formatted"] ='$'+ df["Sales Amount"].map('{:,d}'.format)
(출력 결과)
Country Date Sales Qty. Sales Amount Sales Amount_formatted
0 San Francisco, CO 2022-01-18 170 59500 $59,500
1 Chicago, IL 2022-03-21 810 283500 $283,500
2 Dalas, TX 2022-05-07 340 119000 $119,000
3 Los Angeles, CA 2022-03-11 560 196000 $196,000
4 Seattle, WA 2022-06-02 140 49000 $49,000
Converting from float to percentage (백분율로 숫자 지정)
(원본 데이터)
Country Date Sales Qty. Ratio Sales Amount Sales Amount_formatted
0 San Francisco, CO 2022-01-18 170 0.084158 59500 59,500
1 Chicago, IL 2022-03-21 810 0.400990 283500 283,500
2 Dalas, TX 2022-05-07 340 0.168317 119000 119,000
3 Los Angeles, CA 2022-03-11 560 0.277228 196000 196,000
4 Seattle, WA 2022-06-02 140 0.069307 49000 49,000
약간의 수정과 함께 동일한 문자열 형식 구문을 사용하여 'Ratio' 열의 형식을 백분율로 쉽게 지정할 수 있습니다.
df.loc[:, "Ratio_formatted"] = df["Ratio"].map('{:.2%}'.format)
(출력 결과)
Country Date Sales Qty. Ratio Sales Amount Ratio_formatted
0 San Francisco, CO 2022-01-18 170 0.084158 59500 8.42%
1 Chicago, IL 2022-03-21 810 0.400990 283500 40.10%
2 Dalas, TX 2022-05-07 340 0.168317 119000 16.83%
3 Los Angeles, CA 2022-03-11 560 0.277228 196000 27.72%
4 Seattle, WA 2022-06-02 140 0.069307 49000 6.93%
날짜/시간 열 형식을 년-월로 지정
동일한 기술을 사용하여 '월' 열의 형식을 '연도-월' 또는 원하는 형식으로 지정할 수도 있습니다.
df.loc[:, "Month_formatted"] =df["Date"].map('{:%Y-%m}'.format)
df.loc[:, "DateTime_formatted"] =df["Date"] .map('{:%Y-%m-%d %H:%M:%S}'.format)
df.loc[:, "Year_formatted"] =df["Date"].map('{: %Y}'.format)
Country Date Sales Qty. Ratio Sales Amount Ratio_formatted Month_formatted DateTime_formatted Year_formatted
0 San Francisco, CO 2022-01-18 170 0.084158 59500 8.42% 2022-01 2022-01-18 00:00:00 2022
1 Chicago, IL 2022-03-21 810 0.400990 283500 40.10% 2022-03 2022-03-21 00:00:00 2022
2 Dalas, TX 2022-05-07 340 0.168317 119000 16.83% 2022-05 2022-05-07 00:00:00 2022
3 Los Angeles, CA 2022-03-11 560 0.277228 196000 27.72% 2022-03 2022-03-11 00:00:00 2022
4 Seattle, WA 2022-06-02 140 0.069307 49000 6.93% 2022-06 2022-06-02 00:00:00 2022
마무리
한 가지 중요한 점은 이렇게 Formatting을 하면 열이 문자열/객체 유형으로 변경이 됩니다. Formatting할 열을 항상 새 열로 저장하고 원본 열을 덮어쓰지 않는 것을 권장 합니다. 이는 보고 또는 시각화를 위해 서식이 지정된 새 열을 사용하는 것 보다는 데이터 분석에 적절한 데이터 유형이 있는 원래 원본 데이터를 사용해야 하는 경우가 많기 때문입니다.
'PYTHON > Tips' 카테고리의 다른 글
(Python/Basic) Print 활용 TIP(feat. datetime) (0) | 2022.06.25 |
---|---|
(Python/OS) os.path.getctime() / os.path.getmtime() 파일의 생성/수정 날짜 확인 (0) | 2022.06.15 |
(5min. Python) Pandas read_excel sheet 불러오기 옵션 (0) | 2022.06.13 |
(Tkinter/Entry) 엔트리 바인드 이벤트(bind event) 설정 (0) | 2022.06.10 |
(Python/Matplotlib) 파이썬 폰트 영문명(영문이름) 확인 (0) | 2022.06.04 |