Cum să validezi scheme de date în Python
In this tutorial, you'll learn about Cum să validezi scheme de date în Python. We cover key concepts, practical examples, and best practices.
Validarea schemelor de date în Python cu Great Expectations și pandera asigură că seturile de date respectă tipurile, constrângerile și regulile de business așteptate înainte de analiză.
The Problem
Datele care intră într-un sistem nu respectă întotdeauna formatul așteptat. Coloane lipsă, tipuri greșite, valori în afara domeniului sau NULL-uri neașteptate pot distruge analizele și pot cauza erori greu de depanat. Fără validare, descoperi problemele mult prea târziu.
The Wrong Way
import pandas as pd
df = pd.read_csv("date_intrare.csv")
# Presupui că datele sunt corecte și continui
df["pret"] * df["cantitate"] # crapă dacă "pret" e string
Problemă: Fără validare explicită, erorile apar în producție, nu la intrarea în pipeline.
The Right Way
import pandera as pa
from pandera import Column, DataFrameSchema, Check
schema = DataFrameSchema({
"id": Column(int, Check.greater_than(0)),
"nume": Column(str, Check.str_length(1, 100)),
"pret": Column(float, Check.greater_than(0)),
"data": Column(pd.DatetimeTZDtype(), nullable=True)
})
df = pd.read_csv("date_intrare.csv")
try:
schema.validate(df, lazy=True)
print("Validare trecută cu succes!")
except pa.errors.SchemaErrors as e:
print("Erori de validare:\n", e.failure_cases)
Output:
Erori de validare:
index column check failure_case
0 12 pret greater_than -5
1 45 nume str_length None
Step-by-Step Fix
1. Definește schema cu pandera
Stabilește tipurile și constrângerile pentru fiecare coloană.
schema = DataFrameSchema({
"varsta": Column(int, Check.in_range(0, 120)),
"email": Column(str, Check.str_matches(r"^[a-z@.]+$"))
})
2. Validează datele
df_validat = schema.validate(df, lazy=True)
3. Folosește Great Expectations pentru validări complexe
import great_expectations as ge
df_ge = ge.dataset.PandasDataset(df)
df_ge.expect_column_values_to_be_between("pret", 0, 100000)
df_ge.expect_column_values_to_not_be_null("id")
results = df_ge.validate()
print(results)
Prevention Tips
- Validează datele imediat după citire, înainte de orice transformare
- Folosește
lazy=Truepentru a colecta toate erorile odată - Definește scheme ca fișiere YAML separare pentru reutilizare
Common Mistakes
- Validare după transformare — nu mai știi dacă eroarea e din sursă sau din cod
- Fără
lazy=True— validarea se oprește la prima eroare - Constrângeri prea permisive — schema nu prinde date invalide
- Ignorarea erorilor de validare —
try/exceptgol care înghite excepțiile - Fără versionarea schemei — când datele se schimbă, schema trebuie actualizată
FAQ
Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu pandas pentru productivitate și securitate sporite.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro