본문 바로가기
Python/python

파이썬 데이터 필터링에는 filter 함수를 활용하자

by 노마드 산코디 2023. 10. 15.
728x90

안녕하세요. 오늘은 파이썬 프로그래밍에서 데이터를 정제하고 원하는 조건에 따라 필터링하는 중요한 작업을 더욱 효율적으로 수행하는데 도움을 주는 filter() 함수에 대해 자세히 알아보려고 합니다. 데이터 처리와 조건부 요소 추출에 관한 유용한 기술을 다루고자 합니다.
그럼 filter() 함수는 어떤 특징을 가지고 있는지 바로 알아보도록 하겠습니다.

 

 

 

 


1. filter() 함수란?

filter() 함수는 파이썬 내장 함수 중 하나로, 시퀀스(리스트, 튜플 등)의 각 요소를 특정 조건에 따라 필터링하여 새로운 이터레이터를 반환하는 역할을 합니다. 이 함수를 사용하면 시퀀스에서 조건을 만족하는 요소만 남기거나 추출할 수 있습니다. 


기본 구문

filter(function, iterable)

 

  • function
    필터링 조건을 정의하는 함수를 전달합니다. 이 함수는 각 요소를 받아서 True 또는 False를 반환해야 합니다.
  • iterable
    필터링할 시퀀스(리스트, 튜플, 문자열 등)를 전달합니다.

 

동작
filter() 함수는 iterable의 각 요소를 function 함수에 적용하고, function이 True를 반환하는 요소만 필터링하여 새로운 이터레이터를 반환합니다.


결과
filter()
함수의 결과는 이터레이터 형태로 반환됩니다. 필요에 따라 list() 함수를 사용하여 리스트나 다른 자료형으로 변환할 수 있습니다.



람다 함수와 함께 사용
주로 람다(lambda) 함수를 filter() 함수와 함께 사용하여 간단한 필터링 작업을 수행합니다. 람다 함수는 한 줄로 간단한 필터링 조건을 표현하기에 용이합니다.









2. filter() 함수와 lambda 함수

lambda 함수는 간단한 필터링 조건을 정의할 때 특히 유용합니다.


1. 람다 함수
필터링할 조건을 정의하는 람다 함수를 먼저 정의합니다. 이 함수는 각 요소를 받아서 True 또는 False를 반환해야 합니다.

filter_condition = lambda x: x % 2 == 0  # 짝수를 필터링하는 람다 함수



2. filter() 함수와 함께 사용
filter() 함수에 람다 함수와 필터링할 시퀀스를 전달합니다.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(filter_condition, numbers))


람다 함수 filter_condition은 각 숫자를 받아서 짝수 여부를 판단합니다. filter() 함수는 이 람다 함수를 사용하여 리스트 numbers에서 짝수를 필터링합니다.


3. 결과 처리
filter() 함수의 결과는 이터레이터 형태로 반환됩니다. 필요에 따라 리스트로 변환하거나 다른 처리를 수행할 수 있습니다.

even_numbers = list(filter(filter_condition, numbers))  # 이터레이터를 리스트로 변환




위와 같은 방식으로 람다 함수와 함께 filter() 함수를 사용하면 간단한 필터링 작업을 빠르게 수행할 수 있습니다. 람다 함수는 필터링 조건을 간결하게 정의하는 데 도움이 되며, filter() 함수는 해당 조건을 시퀀스에 적용하여 필터링된 결과를 반환합니다.









3. filter() 함수의 활용 예제



1. 짝수 필터링

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 출력: [2, 4, 6, 8, 10]


이 예제에서는 numbers 리스트에서 짝수만 필터링하여 even_numbers 리스트에 저장합니다.



2. 문자열 리스트에서 공백 제거

words = ["hello", "world", " ", "python", " "]
filtered_words = list(filter(lambda x: x.strip(), words))
print(filtered_words)  # 출력: ['hello', 'world', 'python']


이 예제에서는 문자열 리스트에서 공백 문자열을 제거하고, 비어있지 않은 문자열만 추출합니다.




3. 점수 필터링

scores = [85, 92, 78, 95, 88, 72, 90]
passing_scores = list(filter(lambda x: x >= 80, scores))
print(passing_scores)  # 출력: [85, 92, 95, 88, 90]


이 예제에서는 점수 리스트에서 80 이상인 점수만 필터링하여 passing_scores 리스트에 저장합니다.


4. 리스트에서 특정 조건에 맞는 항목 필터링

students = [
    {'name': 'Alice', 'score': 85},
    {'name': 'Bob', 'score': 92},
    {'name': 'Charlie', 'score': 78},
    {'name': 'David', 'score': 90}
]

high_scorers = list(filter(lambda student: student['score'] >= 90, students))
print(high_scorers)


이 예제에서는 학생 정보를 담고 있는 리스트에서 점수가 90 이상인 학생 정보만 필터링합니다.




이러한 예제를 통해 filter() 함수가 다양한 상황에서 데이터 필터링을 수행하는 데 어떻게 활용될 수 있는지 알 수 있습니다. 필요에 따라 필터링 조건을 변경하여 다양한 작업을 수행할 수 있습니다.










4. filter() 함수 사용시 주의사항



1. 이터레이터 형태로 반환
filter()
 함수의 결과는 이터레이터로 반환됩니다. 따라서 결과를 바로 사용하거나 출력하려면 이터레이터를 리스트로 변환해야 합니다. 예를 들어, list(filter(...)) 형태로 사용하여 결과를 리스트로 변환할 수 있습니다.

even_numbers = list(filter(lambda x: x % 2 == 0, numbers))



2. filter() 함수의 결과가 재사용 가능
filter()
 함수의 결과는 여러 번 재사용할 수 있습니다. 필터링 조건이 변경되지 않는 한, 동일한 결과를 여러 변수에 할당하거나 여러 번 반복적으로 사용할 수 있습니다.

even_filter = filter(lambda x: x % 2 == 0, numbers)
even_numbers1 = list(even_filter)
even_numbers2 = list(even_filter)  # 동일한 결과를 다시 사용 가능



3. 필터링 함수 작성 주의
필터링 함수인 람다 함수 또는 사용자 정의 함수를 작성할 때 주의해야 합니다. 이 함수는 각 요소를 받아서 True 또는 False를 반환해야 하며, 조건을 올바르게 작성해야 원하는 결과를 얻을 수 있습니다.


4. 데이터 형태와 일치 여부
filter() 함수는 입력 데이터와 출력 데이터가 동일한 형태를 가지지 않을 수 있습니다. 예를 들어, 입력이 리스트인 경우 출력은 이터레이터이므로 이에 대한 처리를 고려해야 합니다.


5. 메모리 사용 고려
대용량 데이터를 다룰 때 filter() 함수를 사용할 때 메모리 사용에 주의해야 합니다. 이터레이터를 반환하는 특성 때문에 메모리를 효율적으로 사용할 수 있지만, 필터링된 결과를 리스트로 변환하면 메모리 소비가 크게 늘어날 수 있습니다.


6. 리스트 컴프리헨션 대안
간단한 필터링 작업을 수행할 때는 리스트 컴프리헨션을 고려해볼 수 있습니다. 때로는 리스트 컴프리헨션이 코드를 간결하게 만들 수 있습니다.



주의사항을 염두에 두고 filter() 함수를 활용하면 데이터 필터링 작업을 더 효율적으로 수행할 수 있습니다.





 

 


최종 정리

오늘은 파이썬의 filter() 함수에 대해 간략히 살펴보았습니다. filter() 함수는 데이터 필터링 작업을 효율적으로 수행하는데 도움을 주며, 람다 함수와 함께 사용하면 간단한 필터링 조건을 쉽게 정의할 수 있습니다.

filter() 함수를 활용하면 데이터를 더욱 효과적으로 처리하고 조건에 따라 요소를 추출할 수 있습니다. 다음으로 이러한 개념을 실제 프로젝트나 작업에 적용하여 파이썬의 filter() 함수를 더 잘 활용해 보시기를 권장합니다. 파이썬 프로그래밍 스킬을 발전시키는데 큰 도움이 될 것입니다.

감사합니다.







728x90
반응형