종종 모델 학습을 위해 문자열 데이터를 정수형 데이터로 변환해야 하는 경우가 있다.
이런 경우, 어떤 방법으로 변환할 수 있는지 알아보자.
map 함수
raw_data = { "product_code" : ["A", "A", "C", "B", "E", "C"], "size" : [5.3, 4.2, 7.4, 4.1, 3.7, 1.5]}
df = pd.DataFrame(raw_data)
print(df)
# 출력:
# product_code size
# 0 A 5.3
# 1 A 4.2
# 2 C 7.4
# 3 B 4.1
# 4 E 3.7
# 5 C 1.5
print(df.product_code.map({"A" : 1, "B": 2, "C": 3, "D": 4, "E": 5}))
# 출력:
# product_code size
# 0 1 5.3
# 1 1 4.2
# 2 3 7.4
# 3 2 4.1
# 4 5 3.7
# 5 3 1.5
문자열 범주형 데이터인 product_code의 값을 dict를 사용해서 정수형 데이터로 매핑하여 변환했다.
dict로 매핑하는 방법 외에도 함수로 매핑하여 변환할 수도 있다.
그러나, map 함수에 인자로 주어진 dict의 key에 없는 값은 NaN으로 변환된다.
raw_data = { "product_code" : ["A", "A", "C", "B", "E", "C"], "size" : [5.3, 4.2, 7.4, 4.1, 3.7, 1.5]}
df = pd.DataFrame(raw_data)
print(df)
# 출력:
# product_code size
# 0 A 5.3
# 1 A 4.2
# 2 C 7.4
# 3 B 4.1
# 4 E 3.7
# 5 C 1.5
# 위 코드와 달리, dict에 "A"가 빠졌다.
df["product_code"] = df.product_code.map({"B": 2, "C": 3, "D": 4, "E": 5})
print(df)
# 출력:
# product_code size
# 0 NaN 5.3 A에 해당하는 값이 NaN으로 변환되었다.
# 1 NaN 4.2
# 2 3.0 7.4
# 3 2.0 4.1
# 4 5.0 3.7
# 5 3.0 1.5
replace 함수
이렇게 의도치 않은 NaN 값이 생성되는 문제는 replace 함수를 사용하여 해결할 수 있다.
raw_data = { "product_code" : ["A", "A", "C", "B", "E", "C"], "size" : [5.3, 4.2, 7.4, 4.1, 3.7, 1.5]}
df = pd.DataFrame(raw_data)
print(df)
# 출력:
# product_code size
# 0 A 5.3
# 1 A 4.2
# 2 C 7.4
# 3 B 4.1
# 4 E 3.7
# 5 C 1.5
df["product_code"] = df.product_code.replace({"B": 2, "C": 3, "D": 4, "E": 5})
print(df)
# 출력:
# product_code size
# 0 A 5.3 # 딕셔너리에 A에 대한 매핑이 없기 때문에 값이 유지된다.
# 1 A 4.2
# 2 3 7.4
# 3 2 4.1
# 4 5 3.7
# 5 3 1.5
'AI > Pandas' 카테고리의 다른 글
[Pandas] DataFrame 출력할 때 보여지는 데이터 개수 늘리는 방법 (0) | 2023.03.09 |
---|---|
[Pandas] apply 함수와 applymap 함수 (0) | 2023.03.09 |
[Pandas] DataFrame과 Series 간의 연산 (0) | 2023.03.09 |
[Pandas] DataFrame (0) | 2023.03.09 |
[Pandas] Series (0) | 2023.03.09 |