Dataframe에 저장한 데이터중 특정 값만 출력하고 싶은 경우가 있습니다.
이러한 경우에는 where() 사용해 조건과 일치하는 데이터 행만 출력할 수 있습니다.
where
where은 Dataframe 원하는 컬럼에 조건을 설정해 해당하는 데이터행의 값만 출력합니다.
샘플을 보겠습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [-20, -10, 0, 10, 20],
'B': [1, 2, 3, 4, 5],
'C': ['a', 'b', 'b', 'b', 'a']})
# DataFrame 샘플 데이터
# A B C
# 0 -20 1 a
# 1 -10 2 b
# 2 0 3 b
# 3 10 4 b
# 4 20 5 a
print(df.where(df['C'] == 'a'))
결과
A B C
0 -20.0 1.0 a
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 20.0 5.0 a
Dataframe C항목에 where 조건을 지정했습니다.
C항목 값이 a인 행 데이터만 출력하고 있습니다.
조건과 일치하지 않은 행은 NaN을 표시하고 있습니다.
NaN대신에 다른 값을 표기하고 싶은 경우에는 두 번째 파라미터를 지정합니다.
df.where(검색 조건, NaN 표시값)
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [-20, -10, 0, 10, 20],
'B': [1, 2, 3, 4, 5],
'C': ['a', 'b', 'b', 'b', 'a']})
print(df.where(df['C'] == 'a', 0))
결과
A B C
0 -20 1 a
1 0 0 0
2 0 0 0
3 0 0 0
4 20 5 a
조건과 일치하지 않은 데이터 행은 결측값 NaN대신에 0으로 출력하고 있습니다.
만약 조건과 일치하지 않은 결측값 NaN을 표시하고 싶지 않은 경우에는 dropna를 사용합니다.
자세한 내용은 아래를 참조해주세요.
where 복수 조건
검색 조건을 복수로 설정하는 방법을 알아보겠습니다.
복수 조건으로 AND 조건 또는 OR 조건을 지정할 수 있습니다.
AND 조건 사용 방법을 알아보겠습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [-20, -10, 0, 10, 20],
'B': [1, 2, 3, 4, 5],
'C': ['a', 'b', 'b', 'b', 'a']})
print(df.where((df['C'] == 'a') & (df['A'] == 20)))
결과
A B C
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 20.0 5.0 a
검색조건은 C컬럼 값이 a이고 A컬럼 값에 20인 행만 출력하도록 하고 있습니다.
2개의 조건과 일치하는 데이터는 인덱스가 4인 행입니다.
나머지 데이터행은 NaN으로 표시되고 있습니다.
이번에는 OR 조건을 사용해 검색하는 방법을 알아보겠습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [-20, -10, 0, 10, 20],
'B': [1, 2, 3, 4, 5],
'C': ['a', 'b', 'b', 'b', 'a']})
print(df.where((df['C'] == 'a') | (df['A'] == 10)))
결과
A B C
0 -20.0 1.0 a
1 NaN NaN NaN
2 NaN NaN NaN
3 10.0 4.0 b
4 20.0 5.0 a
검색 조건은 C컬럼 값이 a 또는 A컬럼 값이 10인 행만 출력하도록 하고 있습니다.
2개의 조건과 일치하는 데이터는 인덱스가 0,3,4인 행입니다.
조건과 일치하지 않는 데이터행은 NaN으로 표시되고 있습니다.
!= 조건
값이 일치하지 않는 조건을 설정하는 방법을 보겠습니다.
값이 일치하는 조건으로는 == 를 사용합니다.
일치하지 않는 조건을 검색하고 싶은 경우에는 !=를 사용합니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [-20, -10, 0, 10, 20],
'B': [1, 2, 3, 4, 5],
'C': ['a', 'b', 'b', 'b', 'a']})
print(df.where(df['C'] != 'a'))
결과
A B C
0 NaN NaN NaN
1 -10.0 2.0 b
2 0.0 3.0 b
3 10.0 4.0 b
4 Na N NaN NaN
검색 조건으로 C컬럼의 값이 a가 아닌 데이터행은 검색하고 있습니다.
조건과 일치하는 데이터는 인덱스 1,2,3행입니다.
인덱스 0,4는 조건에 해당되지 않기 때문에 NaN으로 표시되고 있습니다.
댓글