데이터 분석을 하다 보면 문자열(string)을 숫자(int/float)로 변환해야 하는 경우가 자주 발생합니다. 특히 머신러닝 모델이나 통계 분석에서는 텍스트 형태의 범주형 데이터를 고유한 정수 값으로 매핑하여 구분하는 작업이 필수적입니다.
이번 글에서는 CSV(Comma Separated Values) 파일에 담긴 데이터를 활용해, 문자열 값을 정수로 바꾸는 방법을 단계별로 살펴보겠습니다.
예제 데이터 소개
다음과 같은 주식 추천 정보가 담긴 엑셀(CSV) 파일이 있다고 가정해 보겠습니다.
| 회사 | 산업 | 추천(Recommendation) |
|---|---|---|
| HDFC Bank | 금융(Finance) | Hold |
| Apollo | 헬스케어(Healthcare) | Buy |
| Hero | 자동차(Automobile) | Underperform |
| Yes Bank | 금융(Finance) | Hold |
| M&M | 자동차(Automobile) | Underperform |
| Fortis | 헬스케어(Healthcare) | Buy |
| Maruti | 자동차(Automobile) | Underperform |
위 데이터는 방대한 데이터셋의 일부입니다. 'Buy', 'Hold', 'Underperform' 같은 추천 의견을 메타데이터와 연동하려면 각각 고유한 정수 값을 부여해야 합니다. 변환 후 기대되는 결과는 다음과 같습니다.
| 회사 | 산업 | 추천(Recommendation) |
|---|---|---|
| HDFC Bank | 금융(Finance) | 2 |
| Apollo | 헬스케어(Healthcare) | 1 |
| Hero | 자동차(Automobile) | 3 |
| Yes Bank | 금융(Finance) | 2 |
| M&M | 자동차(Automobile) | 3 |
| Fortis | 헬스케어(Healthcare) | 1 |
| Maruti | 자동차(Automobile) | 3 |
그렇다면 문자열 열(column) 값을 정수로 바꾸려면 어떻게 해야 할까요? 대표적인 두 가지 방법을 소개합니다.
방법 1: 딕셔너리(Dictionary)를 활용한 변환
가장 직관적인 방법은 '기존 문자열 → 새 정수' 형태의 키-값 쌍을 담은 딕셔너리를 만들고, 이를 열 전체에 적용하는 것입니다.
# 필요한 라이브러리 임포트
import pandas as pd
# pandas의 read_csv() 함수로 CSV 파일 불러오기
dataframe = pd.read_csv("data_pandas1.csv")
# 키-값 쌍 딕셔너리 생성
# key는 기존 값(문자열), value는 새로운 값(정수)
Recommendation = {'Buy': 1, 'Hold': 2, 'Underperform': 3}
# 딕셔너리의 각 키-값 쌍을 테이블 열에 적용
dataframe.Recommendation = [Recommendation[item] for item in dataframe.Recommendation]
# 변환된 테이블 출력
print(dataframe)실행 결과
Company Industry Recommendation 0 HDFC Bank Finance 2 1 Apollo Healthcare 1 2 Hero Automobile 3 3 Yes Bank Finance 2 4 M&M Automobile 3 5 Fortis Healthcare 1 6 Maruti Automobile 3
'Buy'는 1로, 'Hold'는 2로, 'Underperform'은 3으로 깔끔하게 변환된 것을 확인할 수 있습니다.
방법 2: 조건문을 활용한 직접 할당
딕셔너리를 사용하지 않고, 조건이 일치할 때 해당 열의 개별 필드에 직접 정수 값을 할당하는 방식도 가능합니다.
# 필요한 라이브러리 임포트
import pandas as pd
# pandas의 read_csv() 함수로 CSV 파일 불러오기
dataf = pd.read_csv("data_pandas1.csv")
# Recommendation 열의 각 필드에 조건이 일치하면 정수 값을 직접 할당
# 예: 데이터프레임의 Recommendation 열에서 "Buy"를 찾으면 정수 1을 부여
dataf.Recommendation[data.Recommendation == 'Buy'] = 1
dataf.Recommendation[data.Recommendation == 'Hold'] = 2
dataf.Recommendation[data.Recommendation == 'Underperform'] = 3
print(dataf)실행 결과
Company Industry Recommendation 0 HDFC Bank Finance 2 1 Apollo Healthcare 1 2 Hero Automobile 3 3 Yes Bank Finance 2 4 M&M Automobile 3 5 Fortis Healthcare 1 6 Maruti Automobile 3
두 방법 모두 동일한 결과를 얻을 수 있습니다. 참고로 최신 pandas 버전에서는 체인 인덱싱(chain indexing) 방식의 할당이 경고를 일으킬 수 있으므로, .loc이나 map(), replace() 같은 메서드를 사용하는 것이 더 안전하고 권장됩니다.
마무리
지금까지 CSV 파일의 문자열 데이터를 정수 값으로 변환하는 두 가지 방법을 살펴보았습니다. 실무에서는 범주형 데이터를 수치화해야 하는 상황이 매우 흔하기 때문에, 이러한 변환 기법은 데이터 전처리 과정에서 반드시 익혀두어야 할 기본 스킬입니다. 데이터 크기가 클수록 딕셔너리 매핑이나 pandas 내장 함수를 활용하는 편이 성능과 가독성 면에서 유리합니다.