문자열로 구성된 리스트를 다루다 보면, 중복된 문자열만 삭제하고 싶은 경우가 생깁니다.
예컨대 이런 리스트가 있다고 하겠습니다.
Fruits = ['apple', 'lemon', 'melon', 'lemon', 'apple', 'grape', 'orange', 'orange', 'pear']
보다시피 'apple', 'lemon' 등 여러 문자열(단어)가 반복되는 것을 볼 수 있습니다.
반복되는 문자열을 다 없애고 서로 다른 문자열들만 리스트 안에 남도록 하고 싶다! 고 한다면 어떻게 해야 할까요?
# 리스트
Fruits = ['apple', 'lemon', 'melon', 'lemon', 'apple', 'grape', 'orange', 'orange', 'pear']
# 리스트(list) → 집합(set) → 리스트(list)
Fruits = set(Fruits) # 집합은 중복을 허용하지 않으므로 중복 item 자동 제거
Fruits = list(Fruits) # 다시 리스트로 변환
집합(set)을 활용하면 간단히 중복을 제거할 수 있습니다.
집합은 리스트와 비슷하지만 구성값들의 중복을 허용하지 않습니다. 그렇기 때문에 중복값들이 포함된 리스트를 집합으로 바꿔주면 자동적으로 중복값이 제거됩니다.
# 리스트 출력해보기
print(Fruits)
>> ['orange', 'grape', 'apple', 'pear', 'lemon', 'melon']
이런 중복값 제거는 데이터프레임에서도 활용할 수 있습니다.
예를 들어, 이런 데이터프레임이 있다고 해보죠.
Customer number | Date | Fruits |
1 | 2021-01-31 | apple |
2 | 2021-01-31 | lemon |
3 | 2021-02-01 | melon |
4 | 2021-02-01 | lemon |
5 | 2021-02-01 | apple |
6 | 2021-02-01 | grape |
7 | 2021-02-02 | orange |
8 | 2021-02-02 | orange |
... | ... | ... |
이 데이터는 과일가게에서 과일을 사간 손님들과 일자, 사간 과일들의 정보를 담고 있습니다.
모든 과일가게가 같은 과일을 구비하고 있는 것은 아니죠.
만약 이 과일가게에서 어떤 과일들을 판매하는지, 어떤 과일들은 판매하지 않는지를 알고 싶을 경우 어떻게 알아낼 수 있을까요?
# df는 전체 데이터프레임을 의미합니다
Fruits_li = list(set(df['Fruits'])) # 열(column)에서 중복값을 제거해 리스트로 만든다
>> ['orange', 'grape', 'apple', 'pear', 'lemon', 'melon']
이처럼 데이터 양이 많을 때도 이 코드를 활용하면 간단히 중복값을 제거할 수 있습니다.
value_counts를 통해 구하는 방법도 있지만, 이 방법은 실제 값들을 담은 리스트를 직접적으로 제공해주지는 않는다는 단점이 있습니다.
도움이 되었기를 바랍니다.
'Python > Data Structure' 카테고리의 다른 글
[Python]int, float 리스트 값들을 str로 한꺼번에 변환하기 (2) | 2021.02.08 |
---|---|
[Python]리스트 내 문자열 공백 없애기 (0) | 2021.02.06 |
[Python]리스트에서 특정 문자열만 추출하기 (0) | 2021.01.17 |
[Python] 순서가 뒤집힌 리스트 출력하기 (0) | 2020.10.21 |
[Python] 리스트 내림차순, 오름차순으로 정렬하기 (0) | 2020.10.17 |