판다스 디테일

[Pandas]리스트 요소를 조건으로 사용하는 람다 표현식, 리스트 컴프리핸션

dondon-a 2024. 6. 13. 00:39
반응형

1. 람다 표현식

주어진 코드에서 'table_list'에서 'table_name' 컬럼 값에 'letter_x'리스트의 요소가 포함되지 않은 행들을 필터링하여 새로문'table_llst'를 생성하는 방법은 다음과 같습니다.

letter_x= ['pkg','fdy']
table_list = table_list[~table_list['table_name'].apply(lambda x: any(letter in x for letter in letter_x))]
table_list = table_list.reset_index(drop=True)

위 코드에서는~'연산자를 사용하여 필터링 조건을 부정하고, any 함수를 사용하여 'letter_x 리스트의 요소 중 하나라도 'table_name'에 포함되어 있는지 확인합니다. 이후 reset index(drop=True)를 사용하여 필터링된 결과의 인덱스를 재설정합니다.
주의할 점은 'letter_x' 리스트의 요소를 'table_name'에 포함되지 않는지 확인하기 위해 any함수를 사용하였으며, apply 메서드의 람다 함수에서 "letter_x not in x" 대신에 any(letter in x for letter in letter_x)로 변경되었습니다. 이렇게 변경함으로써 'table_name'에 'letter_x' 리스트의 어떤 요소라도 포함되지 않은 경우를 정확하게 필터링할 수 있습니다.

2.리스트 컴프리핸션

lambda 함수 대신 리스트 컴프리헨션을 사용하여 주어진 코드를 구현하려면 다음과 같이 작성할 수 있습니다.

letter_x= ['pkg', 'fdy']
table_list = [row for row in table_list if not any(letter in row['table_name'] for letter in letter_x)]
table_list = pd.DataFrame(table_list).reset_index(drop=True)

위 코드에서는 리스트 컴프리헨션을 사용하여 table_list'에서 필터링된 행들을 새로운 리스트로 생성합니다. any 함수를 사용하여 'letter_x'리스트의 요소 중 어떤 요소라도 'row#table_list오타인거 같어#['table_name']'에 포함되는지 확인합니다. 필터링된 결과를 새로운 리스트로 생성한 후, 그 리스트를 다시 데이터프레임으로 변환하고 인덱스를 재설정합니다. 이렇게 리스트 컴프리헨션을 사용하여 코드를 구현하면lambda 함수를 사용하는 것 대신 더 간결하고 가독성이 좋은 코드를 작성할 수 있습니다

두 코드 스니펫은 모두 특정 문자열이 포함된 행을 필터링하여 제거하는 기능을 수행하지만, 약간 다른 방식으로 접근합니다. 각각의 장단점과 사용 시 고려해야 할 사항을 비교해보겠습니다.

결론

  • Pandas DataFrame을 사용할 경우: 대용량 데이터 처리가 필요하거나 Pandas 기능을 많이 활용할 계획이라면 첫 번째 방식을 사용하는 것이 좋습니다. -> 정규 표현식을 활용한 str.contains()로 필터링 거는 방법 ( [Pandas] Series.str.contains에서의 정규식 패턴 사용 (tistory.com))
  • 순수 Python 리스트와 딕셔너리를 사용할 경우: 추가 라이브러리 없이 간단한 데이터를 처리하거나, 리스트나 딕셔너리 구조를 그대로 유지하려면 두 번째 방식을 사용하는 것이 좋습니다.

각각의 상황에 맞는 방법을 선택하면 됩니다.

 

 

반응형