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 파일
pandas_sample_data.csv
1 파일 0.11 KB
행 추출 방법
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
댓글