4.5k stars · MIT · v0.33.1 (2026-09-01) · Track this in Rising ↗
Schema validation for DataFrames — the error that fires before a backtest quietly reports a fictional edge.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 26 Oct 2026, one day before this check.
Latest release v0.35.0 on 25 Oct 2026.
Public since November 2018, a little over 7 years.
4,500 stars and 496 forks.
94 commits and 37 new issues in the last 90 days.
248 contributors. 99 pull requests merged in 90 days.
No security policy file says how to report a problem. No published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 13.
▶Repo detailsthe review · specs · pros & cons · install
What it does
It checks data tables against a written description, called a schema. The description names the columns, their types, the values they may hold, what must be unique and what may not be empty. Checks can be single columns, whole rows, or statistical conditions across a column. It works with pandas and Polars, two common table libraries, and with several others. Failures can raise an error or be collected into a report of every bad row. The same description can be used as a decorator on a function, so inputs and outputs are checked where the data enters. Version 0.34.1 was released on 6 October 2026. It checks shape, type and range only: a plausible but wrong number passes every check it can make.
Why it matters
Who it suits. It suits anyone whose conclusions rest on data arriving in a known shape, especially when the data is fetched automatically and nobody looks at it. Research and reporting work benefit most, because that is where a wrong number survives longest. Skip it for a one-off analysis of a file you have read with your own eyes, and skip it inside a fast loop, where checking costs more than it saves.
Verdict. Worth an afternoon, and the gain is entirely in the failures it causes early. Put the checks where data is loaded, not where it is used, and send a notification on failure so a silent problem cannot stay silent. Expect the schemas to be real work with nothing visible to show on the day. great-expectations/great_expectations is the heavier alternative for teams; pydantic/pydantic covers single records rather than tables.
Summary (Key Points)from the README
Key features
- Multi-library support: Works with dataframe-like objects from pandas, polars, pyspark, and more.
- Object-based API: Validates data by defining a schema and applying it to a dataframe.
- Class-based API: Validates data by defining a model class with typed fields.
- Statistically typed dataframes: Aims to make data processing pipelines more readable and robust.
- pandera.pandas module: Introduced in v0.24.0 as the recommended way to define DataFrameSchemas and DataFrameModels for pandas.
- Official documentation: The README points to the official docs for further detail.
Ways to install
| Platform or method | What it needs | Effort |
|---|---|---|
| pip | pip, with the pandas extra for pandas DataFrames | One command |
| uv | uv, with the pandas extra for pandas DataFrames | One command |
| conda | conda, with the pandas extra for pandas DataFrames | One command |
Important
- Top-level import deprecated: Defining schemas from the top-level `pandera` module raises a FutureWarning; switch to `pandera.pandas`.
- Removal version: Using the top-level module for DataFrameSchema and other classes or functions will be deprecated in version 0.29.0.
- Pandas extra required: Pandas DataFrame validation needs the pandas extra, so a plain install is not enough for that use.
- Other libraries not detailed: The README names polars and pyspark but gives no installation or usage steps for them.
Written by an AI model from the project’s README; not part of the review, and it can be wrong.
- MIT licence and plain Python, so it fits inside an existing application or a background job.
- Works with more than one table library, so it survives a change of engine.
- The schema is documentation that cannot go stale, because it fails when it is wrong.
- It checks shape and range, not truth. A believable wrong value passes.
- Writing the schemas is upfront work with no visible result.
- Checking large tables takes real time, so it belongs at the loading step. Needs Python 3.10 or newer.
python3 -m venv venv source venv/bin/activate pip install "pandera[pandas]"

