6.4.4 데이터프레임 조건 검색
① 논리 인덱싱(boolean indexing)
데이터프레임 원소의 비교 논리 값은 다음으로 반환받을 수 있다. 다음으로 원소 값이 10 초과인 자료가 있는 부분은 True가 표시된다.
df2 > 10
위의 블리안 인덱싱 결과를 df2[조건] 내부에 기술하면 True인 원소만 표시되고 False인 원소는 NaN이 표시된다.
df2[df2 > 10]
데이터프레임 df2는 총 13개의 행이 있다. df2[[True, False, ...., False]] 처럼 내부에 논리 값의 목록이나 시리즈를 넣으면 해당 행만 표시된다. 다음처럼 인위적으로 True와 False를 13개 만들어 실행해 보자. True인 처음 6개의 행만 표시된다.
df2[ [True]*6 + [False]*7 ]
데이터프레임 df2에서 ‘재해자수’ 열의 비교 논리 값은 다음으로 반환받을 수 있다. 반환 값 시리즈에서 원소는 13개의 논리 값이다.
df2['재해자수'] > 400
다음 코드로 ‘재해자수’가 400명을 초과한 모든 행을 표시한다.
df2[df2['재해자수'] > 400]
② isin() 함수
다음 df['사망(명)'] == 7로는 열 이름 ‘사망(명)’이 7인 논리 값의 시리즈가 반환된다.
df['사망(명)'] == 7
함수 Series.isin([value0, value1, value2, ...])은 시리즈의 각 요소가 전달된 값 시퀀스의 요소와 정확히 일치하는지 여부를 보여주는 논리 값 시리즈를 반환한다. 다음 df['사망(명)'].isin([7])로는 열 이름 ‘사망(명)’이 7인 논리 값의 시리즈가 반환된다.
df['사망(명)'].isin([7])
다음으로 열 이름 ‘사망(명)’이 7과 10인 논리 값의 시리즈가 반환된다.
df['사망(명)'].isin([7, 10])
위 논리 결과를 첨자로 사용하면, ‘사망(명)’이 7명 또는 10명인 모든 행을 표시할 수 있다.
df[ df['사망(명)'].isin([7, 10]) ]
다음처럼 여러 조건의 조합을 처리할 수 있다. 다음은 사망(명)은 7 또는 10이거나 부상(명)은 350을 초과하는 행을 모두 출력한다.
df[ (df['사망(명)'].isin([7, 10])) | (df['부상(명)'] > 350) ]
③ str.contains() 함수
다음처럼 행 명이나 열 명의 값이 문자열이라면 문자열에 포함된 내용은 함수 str.contains(부분문자열)로 검색이 가능하다. 다음으로 행 레이블에 ‘3’이 포함된 행을 출력한다.
df[ df.index.str.contains('3') ]