Как создать проверку столбца с условием фильтра в PanderaPolars/PanderaPandas?Python

Программы на Python
Ответить
Anonymous
 Как создать проверку столбца с условием фильтра в PanderaPolars/PanderaPandas?

Сообщение Anonymous »

Я пытаюсь использовать библиотеку Pandera для определения проверок качества данных в наборе данных.
Набор данных загружается как фрейм данных Polars, и PanderaPolars используется для определения проверок.
Для некоторых проверок столбцов мы требуем, чтобы общее условие было установлено для нескольких столбцов.
Например
  • проверьте, что столбец A не равен нулю, когда этот столбец B = "unit_price"
  • проверьте, что столбец C = столбец D + столбец E
  • вычислите корреляцию между столбцом F и столбцом G больше 0,5
используя файл, содержащий BUY_SELL (str, B или S), PRODUCT_TYPE (str, REV или XX) , QUANTITY (float)
Я хотел бы определить следующая проверка:
  • когда PRODUCT_TYPE = "REV" и BUY_SELL = "B", проверьте, если QUANTITY > 10.
Я пытался придумать две пользовательские проверки, как показано ниже, используя Pandas (не Polars), но они не работают должным образом. В Polars я не смог написать что-то эквивалентное, поскольку, похоже, у него нет доступной лямбды

Код: Выделить всё

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)
Мой вопрос заключается в том, возможна ли более сложная проверка, подобная перечисленной выше, в Pandera (в идеале Polars, но если не и в Pandas)

Подробнее здесь: https://stackoverflow.com/questions/783 ... s-panderap
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»