Pandas Dataframe에서 열의 값을 쉽게 검색하는 방법
Updated on
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]
;
