Pandera柱的联合独特性



我需要检查数据帧中类似列的联合唯一性。在文档中,我找到了这个代码片段,但它仅适用于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))

我相信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)

相关内容

  • 没有找到相关文章

最新更新