Pandera: 데이터프레임 검증에 최적화된 도구
주요 장점
- Pandas와 통합: Pandas 데이터프레임에 대해 스키마 기반 검증을 수행합니다.
- 유연한 검증 조건: 열 데이터 타입, 값 범위, Null 여부 등 다양한 검증 조건을 정의할 수 있습니다.
- 명확한 오류 메시지: 스키마 불일치에 대한 명확한 오류 메시지를 제공합니다.
단점
- 대용량 데이터 검증에서는 속도가 느릴 수 있습니다.
- 데이터프레임 외 다른 데이터 구조에는 적합하지 않습니다.
대안
- Pydantic(DataFrame이 아닌 일반 데이터 객체 검증에 적합)
- Cerberus(더 가벼운 데이터 검증 라이브러리)
샘플 코드
import pandas as pd
import pandera as pa
from pandera import Column, DataFrameSchema
# 데이터 스키마 정의
schema = DataFrameSchema({
"name": Column(str, nullable=False),
"age": Column(int, pa.Check(lambda x: x > 0), nullable=False),
"email": Column(str, pa.Check.str_matches(r"^.+@.+\..+$"), nullable=True)
})
# 검증 대상 데이터프레임
data = pd.DataFrame({
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, -1],
"email": ["alice@example.com", "bob@site.com", None]
})
# 데이터 검증 수행
validated_data = schema.validate(data) # 오류 발생 시 명확한 메시지 제공
Pydantic: 모델 기반 데이터 검증 도구
주요 장점
- 타입 힌트 기반 검증: Python의 타입 힌트를 활용하여 데이터를 검증합니다.
- 자동 변환: 입력 데이터 타입이 일치하지 않더라도 자동으로 변환합니다.
- 직관적인 사용법: 직관적인 API로 데이터 검증 로직을 간소화합니다.
단점
- 대용량 데이터 처리에 부적합합니다.
- 데이터프레임 기반 분석 작업에는 적합하지 않습니다.
대안
- Marshmallow(직렬화와 데이터 검증 지원)
- Cerberus(더 간단한 스키마 정의 가능)
샘플 코드
from pydantic import BaseModel, EmailStr, ValidationError
# 데이터 모델 정의
class User(BaseModel):
name: str
age: int
email: EmailStr
# 검증 대상 데이터
user_data = {"name": "Alice", "age": "25", "email": "alice@example.com"}
try:
# 데이터 검증 및 변환
user = User(**user_data)
print(user)
except ValidationError as e:
print(e.json())