Набор данных загружается как фрейм данных Polars, и PanderaPolars используется для определения проверок.
Для некоторых проверок столбцов мы требуем, чтобы общее условие было установлено для нескольких столбцов.
Например
- проверьте, что столбец A не равен нулю, когда этот столбец B = "unit_price"
- проверьте, что столбец C = столбец D + столбец E
- вычислите корреляцию между столбцом F и столбцом G больше 0,5
Я хотел бы определить следующая проверка:
- когда PRODUCT_TYPE = "REV" и BUY_SELL = "B", проверьте, если QUANTITY > 10.
Код: Выделить всё
import pandera as pa
import pandas as pd
import warnings
df = pd.read_csv('file.csv')
check_quantity_grouped = pa.Check(
lambda g: g[(True, "B")] > 10,
groupby=lambda df: (
df.assign(product_type_rev=lambda d: d["PRODUCT_TYPE"] == "REV")
.groupby(["product_type_rev", "BUY_SELL"])
)
,ignore_na=True,raise_warning=False, error="trade quantity, when product_type = REV and BUY_SELL = B, is less than 10"
)
check_quantity_filter = pa.Check(
lambda df: df[(df['PRODUCT_TYPE'] == 'REV') & (df['BUY_SELL'] == 'B')] > 10
,ignore_na=True,raise_warning=False
)
schema = pa.DataFrameSchema({
"QUANTITY": pa.Column(float, [check_quantity_filter, check_quantity_grouped], nullable=True)
})
try:
schema(df, lazy=True)
except pa.errors.SchemaErrors as exc:
filtered_df = df[df.index.isin(exc.failure_cases["index"])]
failures = exc.failure_cases
print(f"filtered df:\n{filtered_df}")
print(failures)
Подробнее здесь: https://stackoverflow.com/questions/783 ... s-panderap
Мобильная версия