Python 판다스 DataFrame AND, OR, NOT 여러개 사용 방법

pandas에서 AND, OR, NOT을 사용해 여러 조건을 가지고 행을 추출하는 방법을 보겠습니다.

소스를 작성할 때는 AND, OR, NOT을 &, |, ~로 작성합니다.

조건
 and &
 or |
 not ~

 

DataFrame 테스트 데이터를 준비하겠습니다.

import pandas as pd

df = pd.read_csv('C:/Users/Administrator/Desktop/python/csv/pandas_sample_data.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57


csv 파일

 

 

행 추출 방법

DataFrame에 저장한 데이터를 추출하는 방법을 먼저 보겠습니다.

데이터에서 데이터를 취득하는 기준은 조건과 일치하는지 판단 후 추출하게 됩니다.

참(True), 거짓(False)로 보면 조건과 일치하는 True인 행을 추출합니다.

import pandas as pd

df = pd.read_csv('C:/Users/Administrator/Desktop/python/csv/pandas_sample_data.csv')

mask = [True, False, True, False, True, False]
df_mask = df[mask]
print(df_mask)

 

결과

      name  age state  point
0    Alice   24    NY     64
2  Charlie   18    CA     70
4    Ellen   24    CA     88

 

조건문이 아닌 True와 False를 직접 지정해보면 True 행만 표시되는 것을 볼 수 있습니다.

 

복수 조건 설정

취득하고 싶은 조건을 여러개 설정하고 싶은 경우를 보겠습니다.

2개 조건을 and를 사용해 작성해보겠습니다.

import pandas as pd

df = pd.read_csv('C:/Users/Administrator/Desktop/python/csv/pandas_sample_data.csv')

print(df['age'] < 35)
# 0     True
# 1    False
# 2     True
# 3    False
# 4     True
# 5     True
# Name: age, dtype: bool

print(~(df['state'] == 'NY'))
# 0    False
# 1     True
# 2     True
# 3     True
# 4     True
# 5    False
# Name: state, dtype: bool

print((df['age'] < 35) & ~(df['state'] == 'NY'))
# 0    False
# 1    False
# 2     True
# 3    False
# 4     True
# 5    False
# dtype: bool

 

조건식 결과를 먼저 보면 age와 state로 2개 조건을 and로 연결했습니다.

결과를 보면 2, 4번 이 True로 나왔습니다.

데이터를 취득해 출력해보겠습니다.

import pandas as pd

df = pd.read_csv('C:/Users/Administrator/Desktop/python/csv/pandas_sample_data.csv')

df_and = df[(df['age'] < 35) & ~(df['state'] == 'NY')]
print(df_and)
#       name  age state  point
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88

 

OR 조건도 사용 방법을 동일합니다.

import pandas as pd

df = pd.read_csv('C:/Users/Administrator/Desktop/python/csv/pandas_sample_data.csv')

df_and = df[(df['age'] < 35) & ~(df['state'] == 'NY')]

print((df['age'] < 20) | (df['point'] > 90))
# 0    False
# 1     True
# 2     True
# 3    False
# 4    False
# 5    False
# dtype: bool

df_or = df[(df['age'] < 20) | (df['point'] > 90)]
print(df_or)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70

 

연산자 우선 순위

조건이 3개 이상인 경우에는 연산자 우선순위를 주의해야 합니다.

우선 순이가 높은 순서로는 NOT(~), AND(&), OR(|) 입니다.

따라서 순서에 따라 결과가 달라집니다.

import pandas as pd

df = pd.read_csv('C:/Users/Administrator/Desktop/python/csv/pandas_sample_data.csv')

df_multi_1 = df[(df['age'] < 35) | ~(df['state'] == 'NY') & (df['point'] < 75)]
print(df_multi_1)
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

df_multi_2 = df[(df['age'] < 35) & (df['point'] < 75) | ~(df['state'] == 'NY')]
print(df_multi_2)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

 

3개 이상 조건을 작성할 때에는 괄호로 묶어서 사용해 주는 것이 좋습니다.

import pandas as pd

df = pd.read_csv('C:/Users/Administrator/Desktop/python/csv/pandas_sample_data.csv')

df_multi_3 = df[((df['age'] < 35) | ~(df['state'] == 'NY')) & (df['point'] < 75)]
print(df_multi_3)
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 5    Frank   30    NY     57

 

댓글