pandera

unionai-ossMIT活跃维护

轻量灵活的数据校验库,用声明式 schema 给 pandas 等 DataFrame 做类型、范围和统计假设检查,在数据清洗和管道里提前拦住脏数据。

A light-weight, flexible, and expressive statistical data testing library

v0.35.0发布于 2026-10-25 02:32 UTC4,522star +2 / 7 天512fork同步于 2026-11-10 17:39 UTC

怎么上手

由 README 提炼,执行前请确认
pip install 'pandera[pandas]'
硬件要求按 README 说明

README 未说明,纯 Python 库,无 GPU 或显存要求

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

轻量灵活的数据校验库,给 DataFrame 类数据加统计类型约束,让处理管道更可读更健壮

轻量灵活的数据校验库,用声明式 schema 给 pandas 等 DataFrame 做类型、范围和统计假设检查,在数据清洗和管道里提前拦住脏数据。

核心能力

  • 用 DataFrameSchema 或 DataFrameModel 声明式定义列类型与校验规则
  • 内置 Check 组合类型、范围、集合与自定义 lambda 校验
  • 支持 pandas、polars、pyspark 等多种 DataFrame 库
  • 用 ParsedField 从其他列派生新列,解析与校验合一
  • decisions API 可调用决策模型从非结构化文本填充类型化列

容易踩的坑

v0.24.0 起需改用 import pandera.pandas as pa,顶层 pandera 导入会触发 FutureWarning 并在 0.29.0 废弃;必须安装对应后端 extra(如 pandera[pandas]),否则无法校验该类型数据;decisions 解析需配置 provider,示例中的 MockProvider 仅用于演示

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.35.0
  1. v0.35.0最新正式版2026-10-25 · 2026-10-25 02:32 UTC

    ⭐️ Highlights

    Pandera now supports DataFusion schemas

    import pyarrow
    from datafusion import SessionContext
    
    import pandera.datafusion as pa
    
    schema = pa.DataFrameSchema(
        {
            "state": pa.Column(str),
            "city": pa.Column(str),
            "price": pa.Column(int, pa.Check.in_range(5, 20)),
        }
    )
    
    ctx = SessionContext()
    df = ctx.from_arrow(
        pyarrow.table(
            {
                "state": ["FL", "FL", "CA", "CA"],
                "city": ["Orlando", "Miami", "Los Angeles", "San Francisco"],
                "price": [8, 12, 10, 16],
            }
        )
    )
    
    schema.validate(df)
    

    And of course the class-based dataframe models as well:

    class Schema(pa.DataFrameModel):
        state: str
        city: str
        price: int = pa.Field(in_range={"min_value": 5, "max_value": 20})
    
    
    Schema.validate(df)
    

    What's Changed

  2. v0.34.12026-10-06 · 2026-10-06 15:15 UTC
    查看更新说明

    What's Changed

    Full Changelog: https://github.com/unionai-oss/pandera/compare/v0.34.0...v0.34.1

  3. v0.34.02026-10-05 · 2026-10-05 14:34 UTC
    查看更新说明

    ⭐️ Highlights

    This release adds TensorDict as a supported data container that can be validated with pandera:

    import torch
    from tensordict import TensorDict
    import pandera.tensordict as pa
    
    schema = pa.TensorDictSchema(
        keys={
            "observation": pa.Tensor(dtype=torch.float32, shape=(None, 10)),
            "action": pa.Tensor(dtype=torch.float32, shape=(None, 5)),
        },
        batch_size=(32,),
    )
    
    td = TensorDict(
        {"observation": torch.randn(32, 10), "action": torch.randn(32, 5)},
        batch_size=[32],
    )
    schema.validate(td)
    

    Or using a class-based model:

    class RL(pa.TensorDictModel):
        """Schema for reinforcement learning data."""
    
        # Use PyTorch dtypes in type annotations
        observation: torch.float32 = pa.Field(shape=(None, 10))
        action: torch.int64 = pa.Field(shape=(None,))
        reward: torch.float32 = pa.Field()
    
        class Config:
            batch_size = (32,)
    
    # Validate using the model - schema is built automatically
    td = TensorDict(
        {"observation": torch.randn(32, 10), "action": torch.randint(0, 4, (32,)), "reward": torch.randn(32)},
        batch_size=[32],
    )
    RL.validate(td)
    

    What's Changed

  4. v0.33.12026-09-01 · 2026-09-01 15:20 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/unionai-oss/pandera/compare/v0.33.0...v0.33.1

  5. v0.33.0v0.33.0: Introducing `pandera` CLI, support pyarrow table2026-08-30 · 2026-08-30 04:16 UTC
    查看更新说明

    What's Changed

    New Contributors

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    CI Build Documentation Status PyPI version shields.io PyPI license pyOpenSci Project Status: Active – The project has reached a stable, usable state and is being actively developed. Documentation Status codecov PyPI pyversions DOI asv Total Downloads Conda Downloads Slack

    Pandera is a Union.ai open source project that provides a flexible and expressive API for performing data validation on dataframe-like objects. The goal of Pandera is to make data processing pipelines more readable and robust with statistically typed dataframes.

    Install

    Pandera supports multiple dataframe libraries, including pandas, polars, pyspark, and more. To validate pandas DataFrames, install Pandera with the pandas extra:

    With pip:

    pip install 'pandera[pandas]'
    

    With uv:

    uv pip install 'pandera[pandas]'
    

    With conda:

    conda install -c conda-forge pandera-pandas
    

    Get started

    First, create a dataframe:

    import pandas as pd
    import pandera.pandas as pa
    
    # data to validate
    df = pd.DataFrame({
        "column1": [1, 2, 3],
        "column2": [1.1, 1.2, 1.3],
        "column3": ["a", "b", "c"],
    })
    

    Validate the data using the object-based API:

    # define a schema
    schema = pa.DataFrameSchema({
        "column1": pa.Column(int, pa.Check.ge(0)),
        "column2": pa.Column(float, pa.Check.lt(10)),
        "column3": pa.Column(
            str,
            [
                pa.Check.isin([*"abc"]),
                pa.Check(lambda series: series.str.len() == 1),
            ]
        ),
    })
    
    print(schema.validate(df))
    #    column1  column2 column3
    # 0        1      1.1       a
    # 1        2      1.2       b
    # 2        3      1.3       c
    

    Or validate the data using the class-based API:

    # define a schema
    class Schema(pa.DataFrameModel):
        column1: int = pa.Field(ge=0)
        column2: float = pa.Field(lt=10)
        column3: str = pa.Field(isin=[*"abc"])
    
        @pa.check("column3")
        def custom_check(cls, series: pd.Series) -> pd.Series:
            return series.str.len() == 1
    
    print(Schema.validate(df))
    #    column1  column2 column3
    # 0        1      1.1       a
    # 1        2      1.2       b
    # 2        3      1.3       c
    

    Parse and validate unstructured data

    Pandera can derive a column from the rest of the dataframe, so a schema both parses and validates your data. Declare the derivation on the column itself with ParsedField / ParsedColumn, and the decisions API to fill typed columns from unstructured text by asking a decision model:

    import pandera.decisions as decisions
    
    class Tickets(pa.DataFrameModel):
        body: str
        n_words: int = pa.ParsedField(
            parser=lambda s: s.str.split().str.len(),
            source="body",
        )
        department: Department = pa.ParsedField(
            description="Which team should handle this ticket",
            parser=decisions.Choice(),
        )
    
        class Config:
            parser_source = "body"
    
    # configure a provider (MockProvider is deterministic and free; swap in a
    # real model like TypeSafe Jev or an Ollaya model as a runtime setting)
    with decisions.provider(decisions.MockProvider(seed=7)):
        Tickets.validate(df)
    

    See the decision parsing tutorial to get started.

    [!WARNING] Pandera v0.24.0 introduces the pandera.pandas module, which is now the (highly) recommended way of defining DataFrameSchemas and DataFrameModels for pandas data structures like DataFrames. Defining a dataframe schema from the top-level pandera module will produce a FutureWarning:

    import pandera as pa
    
    schema = pa.DataFrameSchema({"col": pa.Column(str)})
    

    Update your import to:

    import pandera.pandas as pa
    

    And all of the rest of your pandera code should work. Using the top-level pandera module to access DataFrameSchema and the other pandera classes or functions will be deprecated in version 0.29.0

    Next steps

    See the official documentation to learn more.