Pandas Dataframe에서 열의 값을 쉽게 검색하는 방법
업데이트
Pandas DataFrame의 열에서 값을 검색하는 작업은 데이터 필터링, 정제, 분석을 위해 가장 기본적이면서도 중요한 작업입니다. Pandas는 boolean indexing, isin(), query(), 문자열 연산 등 여러 강력한 검색 방법을 제공해, 이 작업을 빠르고 직관적으로 수행할 수 있게 해줍니다.
이 최신 가이드는 실제 워크플로우에 바로 적용할 수 있는 예제와 함께, DataFrame에서 값을 검색할 때 가장 유용하고 현대적인 기법들을 정리합니다.
Pandas DataFrame에서 코딩 없이 빠르게 데이터 시각화를 하고 싶나요?
PyGWalker는 Jupyter Notebook 안에서 DataFrame을 Tableau와 유사한 인터랙티브 UI로 바꿔줍니다.
PyGWalker on GitHub (opens in a new tab)
Pandas DataFrame 기초
Pandas DataFrame은 행과 열에 라벨이 붙어 있는 2차원 표 형태의 자료구조입니다. 예시는 다음과 같습니다:
import pandas as pd
data = {
'Name': ['John', 'Emma', 'Peter', 'David', 'Sophie'],
'Age': [27, 21, 24, 30, 29],
'Gender': ['Male', 'Female', 'Male', 'Male', 'Female'],
'City': ['New York', 'London', 'Paris', 'Tokyo', 'Rio de Janeiro']
}
df = pd.DataFrame(data)
print(df)출력:
Name Age Gender City
0 John 27 Male New York
1 Emma 21 Female London
2 Peter 24 Male Paris
3 David 30 Male Tokyo
4 Sophie 29 Female Rio de JaneiroDataFrame 열에서 값 검색하기
1. 정확히 일치하는 값 찾기 (Boolean Indexing)
result = df[df['Age'] == 27]
print(result)출력:
Name Age Gender City
0 John 27 Male New York어떤 비교 연산자도 사용할 수 있습니다:
| Operator | Meaning |
|---|---|
== | equal |
!= | not equal |
> / < | greater / less |
>= / <= | greater or equal / less or equal |
예시: Age ≥ 25인 행 찾기
df[df['Age'] >= 25]2. isin()으로 여러 값 한 번에 검색하기
cities = ['Paris', 'Tokyo']
df[df['City'].isin(cities)]출력:
Name Age Gender City
2 Peter 24 Male Paris
3 David 30 Male Tokyo특정 값을 제외하고 싶다면 ~df['col'].isin()을 사용합니다.
3. 가독성과 성능이 좋은 query() 사용하기
query()는 SQL에 가까운 문법으로 행을 필터링할 수 있어, 가독성이 좋습니다.
df.query("Age == 27")또는 여러 조건을 함께 사용할 수 있습니다:
df.query("Age > 25 and Gender == 'Female'")중첩된 Boolean indexing보다 코드가 더 깔끔해지는 경우가 많습니다.
4. 문자열 패턴 검색하기 (str.contains())
텍스트 열을 필터링할 때 유용합니다.
부분 문자열 포함 여부 검색
df[df['City'].str.contains('on', case=False, na=False)]특정 문자열로 시작/끝나는 값 검색
df[df['Name'].str.startswith('J')]
df[df['City'].str.endswith('o')]5. 결측/비결측 값 검색하기
df[df['City'].isna()] # 결측값인 행
df[df['City'].notna()] # 결측이 아닌 행6. 여러 열을 함께 검색하기
어느 하나의 열이라도 특정 값을 만족하는 행 찾기:
df[df.eq('Male').any(axis=1)]모든 조건을 동시에 만족하는 행 찾기:
df[(df['Gender'] == 'Female') & (df['Age'] > 25)]성능 팁 (현실적이고 정확한 가이드)
이전에 일부 튜토리얼에서 잘못 알려진 부분들이 있습니다.
아래는 수정된 정확한 성능 가이드입니다:
✔ 1. 반복 값이 많은 열은 category로 변환
비교 연산이 더 빨라질 수 있습니다:
df['City'] = df['City'].astype('category')✔ 2. 아주 큰 데이터셋은 NumPy 배열로 변환해 사용
import numpy as np
ages = df['Age'].to_numpy()
df[ages == 27]✔ 3. 검색에는 apply() 사용을 피하기
boolean indexing, isin(), query() 같은 벡터화 연산이 항상 더 빠릅니다.
❌ 제거된 팁: “.loc[]가 boolean indexing보다 더 빠르다”
이는 잘못된 주장입니다. 둘은 내부적으로 동일하게 동작합니다.
.loc[]는 속도 향상이 목적이 아니라, 라벨 기반 선택을 위해 존재합니다.
⚠ searchsorted() 사용 시 주의사항
searchsorted()는 열이 정렬되어 있을 때만 의미가 있고, 값이 실제로 존재하는지 확인해 주지 않습니다. 예를 들어:
df_sorted = df.sort_values('Age')
idx = df_sorted['Age'].searchsorted(27)이 코드는 Age = 27인 행이 아니라, “삽입 위치”를 반환합니다.
고급 워크플로우에서만 신중히 사용하세요.
마무리
Pandas 열에서 값을 검색하는 작업은 데이터 탐색과 정제의 핵심입니다. Pandas는 다음과 같은 다양한 효율적인 방법을 제공합니다:
- 정확한 일치를 위한 Boolean indexing
- 여러 값을 동시에 필터링하는
isin() - SQL 스타일의 깔끔한 필터링을 위한
query() str.contains()등을 활용한 문자열 검색- 결측값/비결측값 필터링
- 여러 열 조건을 조합한 필터링
이 기법들을 활용하면 필요한 데이터를 빠르고 정확하며 깔끔하게 추출할 수 있습니다.
링크
- Pandas DataFrame을 Python List로 변환하는 방법
- Pandas DataFrame을 Index 기준으로 정렬하는 방법
- Pandas Series를 DataFrame으로 변환하는 방법
- PySpark Dataframe에서 컬럼 이름 리스트 만드는 방법
- Pandas DataFrame을 이어 붙이는 방법
- Pandas DataFrame에서 컬럼 이름을 변경하는 방법
자주 묻는 질문 (FAQ)
-
DataFrame 열에서 특정 값을 검색하려면 어떻게 하나요?
Boolean indexing을 사용합니다:df[df['Age'] == 27] -
열에서 특정 위치의 값을 가져오려면 어떻게 하나요?
행 인덱스 + 열 이름을 함께 사용합니다:df['Age'][0] -
단일 값을 가장 빠르게 가져오는 방법은 무엇인가요?
.at또는.iat를 사용합니다:df.at[0, 'Age'] df.iat[0, 1]
;
