Pandera: schémas pour DataFrames
objectif
Expliquer et montrer comment valider types, plages et contraintes au runtime.
code minimal
import pandas as pd
import pandera as pa
from pandera import Column, DataFrameSchema, Check
schema = DataFrameSchema({
"age": Column(pa.Int64, Check.in_range(0, 120), nullable=False),
"email": Column(pa.String, Check.str_matches(r"^[^@]+@[^@]+\.[^@]+$"))
})
df = pd.DataFrame({"age":[10, 25, 300], "email":["a@x.io","bad","c@x.io"]})
try:
schema.validate(df, lazy=True)
except pa.errors.SchemaErrors as e:
print(len(e.failure_cases))
utilisation
# corriger puis revalider
df.loc[2, "age"] = 30
df.loc[1, "email"] = "b@x.io"
schema.validate(df)
variante(s) utile(s)
# schéma orienté objet
class Users(pa.SchemaModel):
age: pa.typing.Series[int] = pa.Field(ge=0, le=120)
email: pa.typing.Series[str] = pa.Field(str_matches=r"^[^@]+@[^@]+\.[^@]+$")
# Users.validate(df)
notes
- lazy=True agrège les erreurs au lieu d’échouer au premier écart.
- Utilisez SchemaModel pour l’intégration avec type hints.