이번 포스팅에서는 리스트와 사전 자료형을 이용해서 문자열과 숫자를 서로 매핑하고 변환하는 방법을 소개하겠습니다. 

(예전에 이와 비슷한 포스팅을 한적이 있는데요, 예전 거에서 한 발자국씩만 더 나가봤습니다.)

 

(1) 리스트 내 문자열을 숫자로 변환하기

(2) 리스트 내 숫자를 문자열로 변환하기

(3) 고유한 문자열에 정수를 매핑하기 

(4) 고유한 정수에 문자열을 매핑하기 

 

 

 

(1) 리스트 내 문자열 을 숫자로 변환하기

 

* 방법 1: Python의 List Comprehensionint(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']

 

 

 

이번 포스팅이 많은 도움이 되었기를 바랍니다. 

행복한 데이터 과학자 되세요!  :-)

 

728x90
반응형
Posted by Rfriend
,