이번 포스팅에서는 리스트와 사전 자료형을 이용해서 문자열과 숫자를 서로 매핑하고 변환하는 방법을 소개하겠습니다.
(예전에 이와 비슷한 포스팅을 한적이 있는데요, 예전 거에서 한 발자국씩만 더 나가봤습니다.)
(1) 리스트 내 문자열을 숫자로 변환하기
(2) 리스트 내 숫자를 문자열로 변환하기
(3) 고유한 문자열에 정수를 매핑하기
(4) 고유한 정수에 문자열을 매핑하기
(1) 리스트 내 문자열 을 숫자로 변환하기
* 방법 1: Python의 List Comprehension 과 int(str) 메소드를 같이 사용하는 방법입니다.
## Converting string list to integer list
str_list = ['5', '12', '8', '19', '34']
## way 1: list comprehension
int_list = [int(x) for x in str_list]
print(int_list)
# [5, 12, 8, 19, 34]
* 방법 2: map() 메소드를 사용해서 list(map(int, string_list)) 형태로 사용하는 방법입니다.
## way 2: map(int, str) function
int_list2 = list(map(int, str_list))
print(int_list2)
# [5, 12, 8, 19, 34]
(2) 리스트 내 문자열을 숫자로 변환하기
리스트 안의 문자열을 숫자로 바꾸는 방법은 위의 (1)번에서 소개한 2가지 방법과 동일하며, int() 대신 str()을 사용해주면 됩니다.
## converting integer to string
## way 1: list comprehension
[str(i) for i in int_list]
# ['5', '12', '8', '19', '34']
## way 2: map(str, int_list)
list(map(str, int_list))
# ['5', '12', '8', '19', '34']
(3) 고유한 문자열에 정수를 매핑하기
(3-1) sorted(set(label_list)) : 먼저 문자열 리스트 에서 유일한(unique) 문자열 집합을 추출해서 정렬한 후에
--> {k: v+1 for v, k in enumerate(sorted(set(label_list)))}
: 유일한 문자열 별로 1부터 순차적으로 정수를 부여한 사전 자료형을 만듭니다 (향후 매핑 참조에 사용됨)
## original label list
label_list = ['cat', 'dog', 'cat', 'car', 'tree', 'tree', 'dog']
sorted(set(label_list))
# ['car', 'cat', 'dog', 'tree']
## mapping index dictionary(label key: integer value)
label_int_dict = {
k: v+1 for v, k in enumerate(
sorted(set(label_list))
)
}
print(label_int_dict)
# {'car': 1, 'cat': 2, 'dog': 3, 'tree': 4}
(3-2) for x in label_list : label_list 에서 순서대로 문자열 원소값을 for loop 순환문을 통해 하나씩 가져와서
--> [label_int_dict[x]] : 위의 (3-1)에서 생성한 매핑 사전에서 문자열에 해당하는 정수를 매핑해주고 리스트로 만들어줍니다.
## mapping label to integer index using list comprehension
mapped_int_list = [label_int_dict[x] for x in label_list]
print(mapped_int_list)
# [2, 3, 2, 1, 4, 4, 3]
(4) 고유한 정수에 문자열을 매핑하기
(4-1) for k, v in label_int_dict.items() : 위의 (3-1)에서 생성한 문자열-정수 매핑 사전에서 Key, Value 를 불러와서
--> {v: k} : {Value: Key} 로 서로 키와 값의 위치를 바꾸어서 새로 사전 자료형을 만들어줍니다.
(아래 (4-2)에서 매핑 사전으로 사용됨)
## converting integer to label string
int_label_dict = {
v: k for k, v in label_int_dict.items()
}
print(int_label_dict)
# {1: 'car', 2: 'cat', 3: 'dog', 4: 'tree'}
(4-2) for x in mapped_int_list : 위의 (3-2)에서 변환했던 mapped_int_list 리스트에서 정수를 하나씩 불러와서
--> [int_label_dict[x]] : (4-1)에서 생성한 {정수: 문자열} 매핑 사전을 이용해서 정수에 해당하는 문자열을 매핑하고 리스트로 만들어줍니다.
## mapping integer to label using list comprehension
mapped_label_list = [int_label_dict[x] for x in mapped_int_list]
print(mapped_label_list)
# ['cat', 'dog', 'cat', 'car', 'tree', 'tree', 'dog']
이번 포스팅이 많은 도움이 되었기를 바랍니다.
행복한 데이터 과학자 되세요! :-)
'Python 분석과 프로그래밍 > Python 데이터 전처리' 카테고리의 다른 글
[Python] Dictionary를 특정 값, 특정 비율로 분할하기 (0) | 2023.12.08 |
---|---|
[Python pandas] 리스트를 행으로 변환하여 DataFrame 만들기 (0) | 2023.08.14 |
[Python] Pandas 함수 적용: map(), applymap(), apply() (0) | 2023.06.06 |
[Python] 파워포인트와 PDF 파일에서 텍스트 추출하기 (0) | 2023.03.19 |
[Python Numpy] 반복자 enumerate() vs. 다차원 반복자np.ndenumerate() (0) | 2023.03.05 |