【问题标题】:Pandera columns joint uniqueness潘德拉柱联合独特性
【发布时间】:2022-11-08 01:00:35
【问题描述】:

我需要检查数据框以了解相似列的联合唯一性。 在文档中我找到了这个代码 sn-p 但它仅适用于 DataFrameSchema。

import pandas as pd
import pandera as pa

schema = pa.DataFrameSchema(
    columns={col: pa.Column(int) for col in ["a", "b", "c"]},
    unique=["a", "c"],
    report_duplicates = "exclude_first",
)
df = pd.DataFrame.from_records([
    {"a": 1, "b": 2, "c": 3},
    {"a": 1, "b": 2, "c": 3},
])
schema.validate(df)


null_schema = DataFrameSchema({
    "column1": Column(float, Check(lambda x: x > 0), nullable=True)
})

print(null_schema.validate(df))

除了求助于数据框范围的模式检查之外,我将如何为 SchemaModel 实现它?

是否有与此类似的字段级别的 lambda 检查字段配置?

null_schema = DataFrameSchema({
    "column1": Column(float, Check(lambda x: x > 0), nullable=True)
})

print(null_schema.validate(df))

【问题讨论】:

    标签: python pandas validation pandera


    【解决方案1】:

    我相信unique 关键字您正在寻找什么,但文档中的示例对于指出模式级别和列级别检查之间的区别并不是特别有帮助。

    其次,DataFrameSchema 用于此用例,可与SchemaModel 互换。下面的示例将您的示例与SchemaModel 一起使用。

    此检查将通过,因为您正在检查列 a、b 和 c 的联合唯一性。

    class TestSchema(pa.SchemaModel):
    
        a: pa.typing.Series[int] 
        c: pa.typing.Series[int]
        c: pa.typing.Series[int]
    
        class Config:
            unique=["a","b","c"]
    
    df = pd.DataFrame.from_records([
        {"a": 1, "b": 99, "c": 3},
        {"a": 2, "b": 99, "c": 2},
        {"a": 2, "b": 0, "c": 2},
    ])
    TestSchema.validate(df)
    

    如果我们将 unique 关键字更改为仅包含 a 和 c,则检查将失败,因为 (2, 2) 组合出现了两次。

    class TestSchema(pa.SchemaModel):
    
        a: pa.typing.Series[int] 
        c: pa.typing.Series[int]
        c: pa.typing.Series[int]
    
        class Config:
            unique=["a","c"]
    
    df = pd.DataFrame.from_records([
        {"a": 1, "b": 99, "c": 3},
        {"a": 2, "b": 99, "c": 2},
        {"a": 2, "b": 0, "c": 2},
    ])
    TestSchema.validate(df)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 2014-09-15
      • 2017-05-18
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多