Define input and output columns for functions working on pandas dataframes.
Project description
pandas-contract
Provide decorators to check functions arguments and return values using pandas DataFrame.
The decorators utilize the pandera.io library to validate data types and constraints of the input arguments and output values of functions.
Documentation
Documentation on pandas-contract.readthedocs.io
Installation
pip install pandas-contract
Setup
See Setup for first-time setup information.
Usage
ℹ️ Info: Generally, the standard abbreviations for the package imports are
import pandas as pd import pandas_contract as pc import pandera as pa
Check Dataframe structure
The following defines a function that takes a DataFrame with a column 'x' of type
integer as input and returns a DataFrame with the column 'x' of type string as output.
The Pandera.io documentation provides a full overview of the DataFrame/DataSeries checks.
@pc.argument("df", pa.DataFrameSchema({"x": pa.Int}))
@pc.result(pa.DataFrameSchema({"x": pa.String}))
def col_x_to_string(df: pd.DataFrame) -> pd.DataFrame:
"""Convert column x to string"""
return df.assign(x=df["x"].astype(str))
Dynamic Arguments and return values
Required columns and arguments can also be specified dynamically using a function that returns a schema.
@pc.argument("df", pa.DataFrameSchema(
{pc.from_arg("col"): pa.Column()})
)
@pc.result(pa.DataFrameSchema({pc.from_arg("col"): pa.String}))
def col_to_string(df: pd.DataFrame, col: str) -> pd.DataFrame:
return df.assign(**{col: df[col].astype(str)})
Multiple columns in function argument
The decorator also supports multiple columns from the function argument.
@pc.argument("df", pa.DataFrameSchema(
{pc.from_arg("cols"): pa.Column()}
)
)
@pc.result(pa.DataFrameSchema({pc.from_arg("cols"): pa.String}))
def cols_to_string(df: pd.DataFrame, cols: list[str]) -> pd.DataFrame:
return df.assign(**{col: df[col].astype(str) for col in cols})
Retrieve dataframes from a more complex argument
Sometimes the dataframe is not a direct argument of the function, but is part of a more complex argument.
In this case, the decorator argument key can be used to specify the key of the dataframe in the argument.
If key is a callable, it will be called with the argument and the result will be used as the dataframe.
Otherwise, it will be used as a key to retrieve the dataframe from the argument, i.e. arg[key].
Dataframe result is wrapped within another object
@pc.result(key="data")
def into_dict():
"""Dataframe wrapped in a dict"""
return dict(data=pd.DataFrame())
See Key Type for more information and examples.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pandas_contract-0.10.0.tar.gz.
File metadata
- Download URL: pandas_contract-0.10.0.tar.gz
- Upload date:
- Size: 102.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afc35692a8ca006ad5641a082f361f45f39885b0d1bf36401e16070ad9db1ab9
|
|
| MD5 |
d6bf21a026c1975fe7eef99c7115fa57
|
|
| BLAKE2b-256 |
9a5e9455d0c5198ecee39128593585c73a3109f4415018865a384bf2b23361f7
|
Provenance
The following attestation bundles were made for pandas_contract-0.10.0.tar.gz:
Publisher:
python.yml on schollm/pandas-contract
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pandas_contract-0.10.0.tar.gz -
Subject digest:
afc35692a8ca006ad5641a082f361f45f39885b0d1bf36401e16070ad9db1ab9 - Sigstore transparency entry: 626691909
- Sigstore integration time:
-
Permalink:
schollm/pandas-contract@765b37653d586e7dbdc1f751636547b9f9525ef7 -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/schollm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python.yml@765b37653d586e7dbdc1f751636547b9f9525ef7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pandas_contract-0.10.0-py3-none-any.whl.
File metadata
- Download URL: pandas_contract-0.10.0-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3f2b1407cc2c685acadfc866f9a11658db4634b650f4590ca63b68ec516f277
|
|
| MD5 |
608e98b5ded16e7a6e874bc704e4ed25
|
|
| BLAKE2b-256 |
9e93a30c40ae465813d8c99c726636a7cfb816f1271bd60f71b18d5deec38650
|
Provenance
The following attestation bundles were made for pandas_contract-0.10.0-py3-none-any.whl:
Publisher:
python.yml on schollm/pandas-contract
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pandas_contract-0.10.0-py3-none-any.whl -
Subject digest:
c3f2b1407cc2c685acadfc866f9a11658db4634b650f4590ca63b68ec516f277 - Sigstore transparency entry: 626691913
- Sigstore integration time:
-
Permalink:
schollm/pandas-contract@765b37653d586e7dbdc1f751636547b9f9525ef7 -
Branch / Tag:
refs/tags/v0.10.0 - Owner: https://github.com/schollm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python.yml@765b37653d586e7dbdc1f751636547b9f9525ef7 -
Trigger Event:
push
-
Statement type: