Skip to content

10 가지 최고의 Pandas 쿼리 예제 및 도구: 포괄적인 가이드

Pandas는 데이터 조작 및 분석에 강력한 파이썬 라이브러리입니다. 그 중에서도 가장 강력한 도구 중 하나는 query() 함수입니다. 이 함수를 사용하면 직관적이고 효율적인 구문을 사용하여 데이터 프레임에서 데이터를 필터링하고 조작할 수 있습니다. 이 글에서는 query() 함수의 복잡한 내용에 대해 깊이 파고들어 전체 잠재력을 활용할 수 있는지에 대한 지식을 제공합니다.

Pandas의 query() 함수는 불리언 표현식을 가져와서 데이터 프레임의 각 행과 일치시킵니다. 표현식이 True로 평가되는 행만 반환되므로 데이터가 필터링됩니다. 이 함수는 강력한 도구뿐만 아니라 효율적이기도 하여 어떤 데이터 분석가의 도구 상자에도 꼭 필요한 도구입니다.

Python Pandas 데이터프레임으로부터 노 코드를 사용하여 빠르게 데이터 시각화를 만들고 싶으신가요?

PyGWalker는 시각화를 통한 탐색적 데이터 분석을 위한 파이썬 라이브러리입니다. PyGWalker (opens in a new tab)는 판다스 데이터프레임 (및 폴라 데이터프레임)을 Tableau 스타일의 사용자 인터페이스로 변환하여 Jupyter Notebook 데이터 분석 및 데이터 시각화 워크플로우를 간소화할 수 있습니다.

PyGWalker로 데이터 시각화 (opens in a new tab)

파트 1: Pandas Query 이해하기

Pandas Query란?

Pandas query는 불리언 표현식을 사용하여 데이터프레임에서 데이터를 필터링하는 Pandas 라이브러리의 함수입니다. 이 함수는 표현식을 데이터프레임의 각 행과 일치시켜, 표현식이 True로 평가되는 행만 반환합니다. 이 함수는 데이터 조작에 강력한 도구이며 특히 대용량 데이터셋을 처리할 때 유용합니다.

Pandas Query는 어떻게 작동하나요?

Pandas query는 불리언 표현식을 인수로 받아 작동합니다. 이 표현식은 데이터프레임의 각 행과 일치시킵니다. 만약 표현식이 특정 행에 대해 True로 평가된다면, 그 행은 출력 데이터프레임에 포함됩니다. 표현식이 False로 평가된다면, 행은 제외됩니다.

예를 들어, 'A' 열을 가진 df라는 데이터프레임이 있다고 가정해보겠습니다. 'A'가 5 미만인 모든 행을 필터링하고 싶다면 다음과 같이 query를 사용할 수 있습니다:

df.query('A < 5')

이렇게 하면 'A'가 5 미만인 행만 포함하는 새로운 데이터프레임이 반환됩니다.

파트 2: Pandas Query vs Loc

차이점 이해하기

query()loc[] 모두 데이터 선택을 위해 Pandas에서 사용되지만, 약간 다른 방식으로 작동합니다. loc[] 함수는 레이블 기반의 데이터 선택 방법으로, 레이블에 기반하여 데이터를 선택하는 데 사용됩니다. 반면, query()는 데이터 선택을 위해 문자열 표현식을 사용하는 보다 유연한 방법입니다.

예를 들어, 'A'가 5 미만인 행을 선택하려면 loc[]을 다음과 같이 사용할 수 있습니다:

df.loc[df['A'] < 5]

그리고 query()를 사용하면 다음과 같이 사용할 수 있습니다:

df.query('A < 5')

두 방법 모두 동일한 결과를 얻지만, 복잡한 표현식을 다룰 때 특히 query()는 읽기 쉽고 간결한 구문을 제공합니다.

파트 3: 데이터 필터링을 위해 Pandas Query 사용하기

기본 필터링

query()의 주요 사용 용도는 특정 조건에 따라 데이터를 필터링하는 것입니다. 이전 예제에서 보았듯이 query()를 사용하여 특정 조건이 충족되는 행을 선택할 수 있습니다. 조건은 문자열로 지정되며, 유효한 Python 표현식이 될 수 있습니다.

예를 들어, 'A', 'B', 'C' 열을 포함하는 df라는 데이터프레임이 있고, 'A'가 'B'보다 작고 'C'가 10보다 큰 모든 행을 선택하려면 다음과 같이 query를 사용할 수 있습니다:

df.query('A < B and C > 10')

이렇게 하면 'A'가 'B'보다 작고 'C'가 10보다 큰 행만 포함하는 새로운 데이터프레임이 반환됩니다.

다중 조건 필터링

Pandas query를 사용하여 여러 조건에 따라 데이터를 필터링할 수도 있습니다. andor와 같은 논리 연산자를 사용하여 여러 조건을 결합할 수 있습니다.

예를 들어, 'A'가 5 미만인 행 또는 'B'가 10보다 큰 행만 선택하려면 다음과 같이 query를 사용할 수 있습니다:

df.query('A < 5 or B > 10')

이렇게 하면 'A'가 5 미만인 행이거나 'B'가 10보다 큰 행만 포함하는 새로운 데이터프레임이 반환됩니다.

문자열 포함에 따른 필터링

Pandas query를 사용하여 문자열 값을 기준으로 데이터를 필터링할 수도 있습니다. 예를 들어, 'Name'이라는 열이 있는 데이터프레임에서 'Name'이라는 문자열을 포함하는 모든 행을 선택하려면 다음과 같이 query를 사용할 수 있습니다:

df.query('Name.str.contains("John")')

이렇게 하면 'Name'이 'John'이라는 문자열을 포함하는 행만 포함하는 새로운 데이터프레임이 반환됩니다.

파트 4: Pandas Query의 고급 사용 방법

공백이 포함된 열 이름이 있는 데이터프레임과 Query 사용하기

데이터프레임에 공백이 포함된 열 이름이 있는 경우, 역따옴표를 사용하여 여전히 query()를 사용할 수 있습니다. 예를 들어, 'First Name'이라는 열이 있는 경우 다음과 같이 query를 사용할 수 있습니다:

df.query('`First Name` == "John"')

이렇게 하면 'First Name'이 'John'인 행만 포함하는 새로운 데이터프레임이 반환됩니다.

행과 열 선택을 위해 Query 사용하기

Pandas query를 사용하여 특정 행과 열을 데이터프레임에서 선택할 수도 있습니다. 예를 들어, 'C'가 10보다 큰 모든 행의 'A' 및 'B' 열을 선택하려면 다음과 같이 query를 사용할 수 있습니다:

df.query('C > 10')[['A', 'B']]

이 마크다운 파일은 'C' 열이 10보다 큰 행의 'A' 및 'B' 열만 포함하는 새로운 DataFrame을 반환합니다.

파트 5: 판다스 쿼리 성능 튜닝

판다스 쿼리는 이미 성능을 최적화하였지만, 쿼리를 더 빠르게 실행하기 위해 몇 가지 작업을 할 수 있습니다. 가장 효과적인 쿼리 성능 향상 방법 중 하나는 벡터화 연산을 사용하는 것입니다. 이는 배열 전체에 대해 개별 요소가 아닌 한 번에 적용되는 연산입니다.

예를 들어, 열의 각 요소를 순환하며 루프를 사용하는 대신 벡터화 연산을 사용하여 한 번에 열 전체에 함수를 적용할 수 있습니다. 이는 특히 대형 데이터 세트의 경우 성능을 크게 향상시킬 수 있습니다.

쿼리 성능을 향상시키는 또 다른 방법은 eval() 함수를 query()와 함께 사용하는 것입니다. eval() 함수는 query()보다 더 효율적으로 복잡한 식을 평가할 수 있으며, 쿼리의 속도를 높일 수 있습니다.

예를 들어, 다음과 같은 복잡한 쿼리가 있다면:

df.query('A < B and C > D or E < F')

eval()을 사용하여 식을 더 효율적으로 평가할 수 있습니다:

df.query(df.eval('A < B and C > D or E < F'))

파트 6: 판다스 쿼리를 활용한 머신 러닝과 생성적 AI

판다스 쿼리는 데이터 분석뿐만 아니라 머신 러닝과 생성적 AI에도 유용합니다. 데이터를 효율적으로 필터링하고 조작하도록 허용하는 query()를 사용하면 데이터를 머신 러닝 알고리즘에 맞게 준비할 수 있습니다.

예를 들어, query()를 사용하여 데이터 세트에서 특정 기능을 선택하거나 모델의 성능에 부정적인 영향을 미칠 수 있는 이상치를 필터링할 수 있습니다. 또한 기존 기능을 기반으로 새로운 기능을 생성하는 데에도 query()를 사용할 수 있으며, 이는 모델의 예측력을 향상시킬 수 있습니다.

기존 데이터를 기반으로 새로운 데이터를 생성하는 생성적 AI도 query()의 이점을 얻을 수 있습니다. 데이터를 쉽게 필터링하고 조작할 수 있는 query()를 사용하면 더 다양하고 현실적인 가짜 데이터를 만들 수 있습니다.

자주 묻는 질문

공백을 포함한 열 이름이 있는 데이터프레임에도 query()를 사용할 수 있을까요?

네, 데이터프레임에 공백이 포함된 열 이름이 있는 경우, 백틱으로 열 이름을 감싸서 query()를 사용할 수 있습니다. 예를 들어, 'First Name'이라는 열을 갖고 있다면 다음과 같이 쿼리를 사용할 수 있습니다:

df.query('`First Name` == "John"')

판다스 쿼리를 데이터프레임에서 데이터 필터링에 어떻게 사용할 수 있나요?

판다스 쿼리는 특정 조건에 따라 데이터를 필터링하는 데 사용됩니다. 이 함수는 부울 식을 인수로 받으며, 데이터프레임의 각 행과 일치하는 식을 매칭시킵니다. 식이 특정 행에 대해 True로 평가되면 해당 행은 출력 데이터프레임에 포함됩니다.

판다스 쿼리와 loc의 차이점은 무엇인가요?

query()loc[] 모두 판다스에서 데이터 선택에 사용되지만, 약간 다른 방식으로 작동합니다. loc[] 함수는 레이블 기반 데이터 선택 방법으로 레이블에 기반하여 데이터를 선택합니다. 반면, query()는 문자열 식을 사용하는보다 유연한 메서드로 데이터 선택에 사용됩니다.