팬다스에서 논리 연산자를 사용한 부울 인덱싱
기본 개념
부울 인덱싱은 논리 표현식을 사용하여 데이터 프레임의 특정 행과 열을 선택하는 방법입니다. 이는 데이터 프레임의 각 요소를 평가하여 True 또는 False 값을 반환하는 마스크를 만드는 것과 유사합니다. 이 마스크를 사용하여 원하는 데이터만 포함하는 새 데이터 프레임을 만들 수 있습니다.
논리 연산자는 부울 인덱싱 표현식에서 여러 조건을 결합하는 데 사용됩니다. 가장 일반적으로 사용되는 논리 연산자는 다음과 같습니다.
and
: 두 조건 모두 True여야만 결과가 True입니다.or
: 하나 이상의 조건이 True이면 결과가 True입니다.not
: 조건을 반전합니다. 즉, False가 True로, True가 False로 변환됩니다.
예제
다음은 팬다스에서 논리 연산자를 사용한 부울 인덱싱의 몇 가지 예제입니다.
예제 1: age
열이 30보다 크고 sex
열이 'Male'인 행만 선택합니다.
import pandas as pd
# 데이터 프레임 만들기
data = {'age': [25, 32, 27, 18, 31], 'sex': ['Male', 'Male', 'Female', 'Male', 'Female']}
df = pd.DataFrame(data)
# 부울 인덱싱 사용
filtered_df = df[(df['age'] > 30) & (df['sex'] == 'Male')]
# 결과 출력
print(filtered_df)
예제 2: city
열이 '서울' 또는 '부산'이고 price
열이 100,000보다 작은 행만 선택합니다.
import pandas as pd
# 데이터 프레임 만들기
data = {'city': ['서울', '부산', '대구', '인천', '서울'], 'price': [120000, 95000, 150000, 135000, 88000]}
df = pd.DataFrame(data)
# 부울 인덱싱 사용
filtered_df = df[(df['city'].isin(['서울', '부산'])) & (df['price'] < 100000)]
# 결과 출력
print(filtered_df)
예제 3: name
열이 'Alice'가 아닌 모든 행을 선택합니다.
import pandas as pd
# 데이터 프레임 만들기
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'], 'age': [30, 25, 22, 27, 31]}
df = pd.DataFrame(data)
# 부울 인덱싱 사용
filtered_df = df[~df['name'].isin(['Alice'])]
# 결과 출력
print(filtered_df)
이처럼 논리 연산자를 사용하면 팬다스에서 데이터 프레임을 효과적으로 필터링하고 특정 조건에 맞는 데이터만 추출할 수 있습니다.
참고 자료
예제 코드
import pandas as pd
# 데이터 만들기
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],
'age': [30, 25, 22, 27, 31],
'city': ['서울', '부산', '대구', '인천', '서울'],
'price': [120000, 95000, 150000, 135000, 88000]}
df = pd.DataFrame(data)
# 예제 1: 'age' 열이 30보다 크고 'sex' 열이 'Male'인 행만 선택합니다.
filtered_df = df[(df['age'] > 30) & (df['sex'] == 'Male')]
print(filtered_df)
# 예제 2: 'city' 열이 '서울' 또는 '부산'이고 'price' 열이 100,000보다 작은 행만 선택합니다.
filtered_df = df[(df['city'].isin(['서울', '부산'])) & (df['price'] < 100000)]
print(filtered_df)
# 예제 3: 'name' 열이 'Alice'가 아닌 모든 행을 선택합니다.
filtered_df = df[~df['name'].isin(['Alice'])]
print(filtered_df)
이 코드는 다음과 같은 결과를 출력합니다.
name age city price
0 Bob 25 부산 95000
1 Charlie 22 대구 150000
2 David 27 인천 135000
4 Alice 31 서울 88000
name age city price
0 Bob 25 부산 95000
1 Charlie 22 대구 150000
2 David 27 인천 135000
4 Alice 31 서울 88000
name age city price
1 Bob 25 부산 95000
2 Charlie 22 대구 150000
3 David 27 인천 135000
4 Alice 31 서울 88000
이 예제는 논리 연산자를 사용하여 다양한 조건을 기반으로 데이터 프레임을 필터링하는 방법을 보여줍니다. 실제 데이터 분석에서는 필요에 따라 더 복잡한 조건을 사용할 수 있습니다.
추가 정보
팬다스 데이터프레임에서 부울 인덱싱을 위한 대체 방법
query 메서드:
query
메서드는 SQL과 유사한 문자열 표현식을 사용하여 데이터프레임을 필터링하는 간편한 방법을 제공합니다.
import pandas as pd
# 데이터 만들기
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],
'age': [30, 25, 22, 27, 31],
'city': ['서울', '부산', '대구', '인천', '서울'],
'price': [120000, 95000, 150000, 135000, 88000]}
df = pd.DataFrame(data)
# 예제 1: 'age' 열이 30보다 크고 'sex' 열이 'Male'인 행만 선택합니다.
filtered_df = df.query("age > 30 and sex == 'Male'")
print(filtered_df)
# 예제 2: 'city' 열이 '서울' 또는 '부산'이고 'price' 열이 100,000보다 작은 행만 선택합니다.
filtered_df = df.query("city in ['서울', '부산'] and price < 100000")
print(filtered_df)
# 예제 3: 'name' 열이 'Alice'가 아닌 모든 행을 선택합니다.
filtered_df = df.query("name != 'Alice'")
print(filtered_df)
loc 및 iloc 인덱서:
loc
및 iloc
인덱서는 행과 열을 선택하는 데 더 명확하고 제어 가능한 방법을 제공합니다.
loc
: 행 레이블을 기준으로 인덱싱합니다.
import pandas as pd
# 데이터 만들기
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],
'age': [30, 25, 22, 27, 31],
'city': ['서울', '부산', '대구', '인천', '서울'],
'price': [120000, 95000, 150000, 135000, 88000]}
df = pd.DataFrame(data)
# 예제 1: 'age' 열이 30보다 크고 'sex' 열이 'Male'인 행만 선택합니다.
filtered_df = df.loc[(df['age'] > 30) & (df['sex'] == 'Male')]
print(filtered_df)
# 예제 2: 'city' 열이 '서울' 또는 '부산'이고 'price' 열이 100,000보다 작은 행만 선택합니다.
filtered_df = df.loc[(df['city'].isin(['서울', '부산'])) & (df['price'] < 100000)]
print(filtered_df)
# 예제 3: 'name' 열이 'Alice'가 아닌 모든 행을 선택합니다.
filtered_df = df.loc[~df['name'].isin(['Alice'])]
print(filtered_df)
isin 함수:
isin
함수는 특정 값 목록에 포함되는지 확인하는 데 유용합니다.
import pandas as pd
# 데이터 만들기
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],
'age': [30, 25, 22, 27, 31],
'city': ['서울', '부산', '대구', '인천', '서울'],
'price': [120000, 95000, 150000, 135000, 88000]}
df = pd.DataFrame(
python pandas dataframe