안녕하세요! 오늘은 Python의 인기 있는 데이터 분석 라이브러리인 Pandas에 대한 깊이 있는 이해를 위해, 데이터 필터링 기법 중에서 불리언 인덱싱, .isin(), .isna(), .notna() 함수에 대해 자세히 살펴볼 것입니다.
1. 불리언 인덱싱 (Boolean Indexing)
불리언 인덱싱이란 원하는 데이터를 행 또는 열에서 선택할 때 불리언(True/False) 값으로 인덱스를 지정해 필터링하는 방식을 말합니다. 일반적으로 조건식을 통해 True 또는 False 값을 반환하는 연산을 통해 구현됩니다.
예시 1
import pandas as pd
# 데이터 생성
data = {'Name': ['John', 'Anna', 'Peter', 'Linda'],
'Age': [28, 24, 35, 32],
'City': ['New York', 'Paris', 'Berlin', 'London']}
df = pd.DataFrame(data)
# 불리언 인덱싱
above_30 = df['Age'] > 30
print(df[above_30])
위의 코드에서는 불리언 인덱싱을 이용해 'Age' 컬럼의 값이 30 초과인 행만을 선택하는 작업을 수행합니다. 'Age'가 30을 초과하는 행은 'Peter'와 'Linda'의 행이며, 이들만을 출력합니다.
2. .isin() 메서드
.isin() 메서드는 특정 값이 데이터프레임 내에 있는지 여부를 확인하고 싶을 때 사용합니다. 원하는 값들을 리스트 형태로 전달하면, 해당 값이 있는 위치에는 True를, 없는 위치에는 False를 반환합니다.
예시 2
# .isin() 사용
in_city = df['City'].isin(['Paris', 'Berlin'])
print(df[in_city])
위의 코드에서는 '.isin()' 메서드를 이용해 'City' 컬럼의 값이 'Paris' 또는 'Berlin'인 행만 선택하는 작업을 수행합니다.
3. 불리언 인덱싱 + .isin()
불리언 인덱싱과 .isin() 메서드를 함께 사용하면, 더 복잡한 데이터 필터링을 할 수 있습니다. 이를 통해 여러 컬럼에 걸쳐 다양한 조건을 적용할 수 있습니다.
예시 3
# 불리언 인덱싱 + .isin()
in_city_above_30 = df[above_30 & in_city]
print(in_city_above_30)
위의 코드에서는 'City' 컬럼의 값이 'Paris' 또는 'Berlin'이면서 동시에 'Age'가 30 초과인 행만 선택합니다. 이렇게 불리언 인덱싱과 .isin() 메서드를 함께 사용하면, 두 개 이상의 조건을 만족하는 데이터를 더 쉽게 필터링할 수 있습니다.
4. .isna()와 .notna() 메서드
.isna() 메서드는 데이터프레임 내의 결측치를 찾을 때 사용되며, .notna() 메서드는 결측치가 아닌 값을 찾을 때 사용됩니다. 두 메서드 모두 결측치 위치에는 True를, 결측치가 아닌 위치에는 False를 반환합니다.
예시 4
# 결측치 추가
df.loc[4] = ['Sophie', None, 'Berlin']
# .isna() 사용
is_na = df['Age'].isna()
print(df[is_na])
# .notna() 사용
not_na = df['Age'].notna()
print(df[not_na])
위의 코드에서는 'Sophie'의 'Age'를 결측치로 설정합니다. 이후 .isna()를 사용해 'Age'가 결측치인 행을 선택하고, .notna()를 사용해 'Age'가 결측치가 아닌 행을 선택합니다.
위의 방법들은 데이터 필터링을 통해 필요한 정보를 쉽고 빠르게 찾아낼 수 있게 해줍니다. 각각의 상황에 따라 적합한 메서드와 인덱싱 방법을 활용해 데이터 분석의 효율성을 높일 수 있습니다. 다음 시간에는 다른 Pandas 기능에 대해 더 깊이 있게 알아볼 예정이니, 기대해 주세요!
댓글