如何在Pandera的SchemaModel中实现联合唯一性与字段级Lambda检查?
Pandera SchemaModel 实现联合唯一性检查及字段级Lambda校验
一、SchemaModel 中实现联合唯一性检查
在SchemaModel中,可通过@pa.check_dataframe()装饰器定义DataFrame级别的联合唯一性约束,用法与DataFrameSchema的unique参数一致:
import pandas as pd import pandera as pa from pandera.typing import DataFrame, Series class MySchema(pa.SchemaModel): a: Series[int] b: Series[int] c: Series[int] # 指定联合唯一列,配置重复项报告规则 @pa.check_dataframe(unique=["a", "c"], report_duplicates="exclude_first") def check_unique_ac(cls, df: DataFrame) -> DataFrame: return df # 测试数据 df = pd.DataFrame.from_records([ {"a": 1, "b": 2, "c": 3}, {"a": 1, "b": 2, "c": 3}, # 该行属于a+c的重复项,会触发校验失败 ]) # 执行校验 MySchema.validate(df)
二、字段级Lambda检查的Field配置方式
SchemaModel中可通过pa.Field()实现与DataFrameSchema里Column等价的字段级Lambda检查,直接在字段注解中配置:
class NullableSchema(pa.SchemaModel): column1: Series[float] = pa.Field( checks=pa.Check(lambda x: x > 0), # 字段级Lambda校验规则 nullable=True # 允许字段为空值 ) # 测试示例(假设有符合规则的数据集) # df = pd.DataFrame({"column1": [1.5, 2.3, None, 4.1]}) # print(NullableSchema.validate(df))
以上代码分别实现了你提供的DataFrameSchema示例中的联合唯一性校验和字段级Lambda校验逻辑。
内容的提问来源于stack exchange,提问作者MariaMadalina
相关产品推荐
相关产品推荐

