Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 판다스 데이터프레임에서 회문(Palindrome) 이름 필터링하는 방법

회문(palindrome)은 앞에서부터 읽어도 뒤에서부터 읽어도 동일한 문자열을 의미합니다. 예를 들어 'bob', 'hannah'처럼 거꾸로 읽어도 같은 이름이 여기에 해당합니다. 이 글에서는 판다스 데이터프레임의 'Name' 열에서 이러한 회문 이름만 골라내는 두 가지 방법을 단계별로 살펴보겠습니다.

기대 결과

회문 이름을 필터링하면 다음과 같은 결과가 출력됩니다.

Palindrome names are:
    Id   Name
0   1   bob
2   3   hannah

방법 1: 리스트 컴프리헨션 활용

  • 먼저 데이터프레임을 정의합니다.

  • 리스트 컴프리헨션 안에 for 반복문을 작성하여 df['Name'] 열의 모든 값을 변수 i로 하나씩 접근하고, if 조건으로 i == i[::-1]인지 비교합니다. 조건을 만족하는 값만 리스트에 추가됩니다. 참고로 슬라이싱 [::-1]은 문자열을 뒤집는 파이썬의 가장 간결한 기법입니다.

l = [i for i in df['Name'] if(i==i[::-1])]
  • 마지막으로 isin() 함수를 사용해 리스트에 담긴 값들이 df['Name'] 열에 존재하는지 확인하고, 해당 행만 필터링합니다.

df[df['Name'].isin(l)]

예제 코드

다음 전체 코드를 통해 더 쉽게 이해할 수 있습니다.

import pandas as pd
data = {'Id':[1,2,3,4,5],'Name':['bob','peter','hannah','james','david']}
df = pd.DataFrame(data)
print("DataFrame is:\n", df)
l = [i for i in df['Name'] if(i==i[::-1])]
print("Palindrome names are:\n", df[df['Name'].isin(l)])

실행 결과

DataFrame is:
    Id    Name
0   1   bob
1   2   peter
2   3   hannah
3   4   james
4   5   david
Palindrome names are:
    Id  Name
0   1   bob
2   3   hannah

방법 2: 람다와 filter 함수 활용

  • 먼저 데이터프레임을 정의합니다.

  • filter 함수에 람다(lambda)를 적용하여 df['Name'] 열의 각 값을 reversed()로 뒤집은 결과와 원래 값이 같은지 비교합니다. 두 값이 일치하면 그 값을 결과 리스트에 저장합니다.

result = list(filter(lambda x:(x=="".join(reversed(x))),df['Name']))
  • 마찬가지로 isin() 함수를 사용해 결과 리스트의 값들이 df['Name'] 열에 존재하는지 확인하여 최종 행을 추출합니다.

df[df['Name'].isin(result)]

예제 코드

다음 전체 코드를 직접 실행해 보면 이해에 도움이 됩니다.

import pandas as pd
data = {'Id':[1,2,3,4,5],'Name':['bob','peter','hannah','james','david']}
df = pd.DataFrame(data)
print("DataFrame is:\n", df)
result = list(filter(lambda x:(x=="".join(reversed(x))),df['Name']))
print("Palindrome names are:\n", df[df['Name'].isin(result)])

실행 결과

DataFrame is:
    Id  Name
0   1   bob
1   2   peter
2   3   hannah
3   4   james
4   5   david
Palindrome names are:
    Id  Name
0   1   bob
2   3   hannah