[data science] pandas - query()

덴장·2026년 4월 21일

data

목록 보기
30/55
loan_df[loan_df['income'] >= 5000]

위의 코드를 query()를 사용해서 변경할 수 있다.

loan_df.query('income >= 5000')
  • DataFrame에 query() 함수를 사용하면 좀 더 간단한 코드로 동일한 결과물을 얻을 수 있다. 아래와 같이 query() 함수에 따옴표(' 혹은 ") 안에 조건식을 넣어서 값을 넘겨주면 되는데 조건식에서 DataFrame에 대한 언급을 생략하고 바로 컬럼 이름만 쓰면 되어서 코드가 좀 더 간결해지는 효과가 있다.

  • 조건식에 변수를 사용하는 것도 가능. 예를 들어 income_mean이라는 변수에 대출 신청자들의 수입 평균을 저장해 두고 query() 안에 'income > @income_mean' 이런 식으로 써 주면 수입이 평균보다 큰 신청자들의 데이터만 뽑을 수 있다. 이때 변수 앞에 @를 쓰지 않으면 오류가 나니까 주의.

income_mean = loan_df['income'].mean()

loan_df.query('income > @income_mean')
  • 조건식 안에 문자열을 넣어야 할 때에는 아래 코드처럼 큰 따옴표(")와 작은 따옴표(')를 함께 활용해야 합니다. 컬럼명에 공백이 포함되어 있으면 property area 이런 식으로 컬럼명을 백틱(```)으로 감싸 주면 됩.
loan_df.query("property_area == 'City'")
  • 등호나 부등호로 된 식 말고도, True나 False 값을 리턴하는 다양한 형태의 조건식을 사용할 수 있다. in이나 not in 연산자.
loan_df.query("property_area in ['City', 'Suburb']")

loan_df.query("property_area not in ['City', 'Suburb']")
  • query() 함수에서도 마찬가지로 여러 개의 조건을 결합해서 사용가능. and(&) 연산자, not(~) or(|) 연산자.
loan_df.query("married == 'Y' & income > @income_mean") 
  • 각각의 조건식을 좀 더 명확하게 볼 수 있도록 괄호로 묶어 줄 수도 있다. 특히 not(~) 연산자를 사용하는 경우에는 괄호로 조건식을 묶어 줘야 코드가 예상치 못하게 작동하거나, 오류가 발생하는 걸 방지.
loan_df.query("(married == 'Y') & (income > @income_mean)") 
  • query() 함수를 사용하면 좀 더 간결한 코드로 DataFrame에서 불린 인덱싱을 할 수 있다. 내부적인 작동 방식은 대괄호를 사용해서 불린 인덱싱을 하는 것과 거의 동일. 다만 데이터가 많은 경우에는 query() 함수를 쓸 때 속도가 조금 느려짐.
profile
개발자

0개의 댓글