如何验证 Polars DataFrame 中是否存在具有相应数据类型的特定列?

问题描述 投票:0回答:1

我想验证给定的 Polars DataFrame 中是否存在特定的列及其数据类型。 Polars DataFrame 可能有额外的列。我知道 Patito 用于极坐标数据验证。但不幸的是,我找不到一种方法来验证我所需的列及其数据类型是否存在。对于 DataFrame 中的附加列,由于列过多,会引发ValidationError

import polars as pl
import patito as pt


class model(pt.Model):
    name: str
    age: int

df = pl.DataFrame(
    {
        "name": ["Peter", "Anna", "Tyler"],
        "age": [29, 18, 49],
        "location": ["Chicago", "Paris", "Singapur"],
    }

model.validate(df) #raises ValidationError due to superflous column "location"

如果可以使用

patito
,我如何验证包含空格和连字符的列名称,例如“第 1 列”还是“第 1 列”?

编辑1 有关附加问题的进一步解释。

import polars as pl
import patito as pt


class model(pt.Model):
    name: str
    column-1: int #won't work since variable names only contain alpha-numeric characters and underscores

df = pl.DataFrame(
    {
        "name": ["Peter", "Anna", "Tyler"],
        "column-1": [29, 18, 49],
        "location": ["Chicago", "Paris", "Singapur"],
    }

model.validate(df) #raises ValidationError due to superflous column "location"
python validation python-polars
1个回答
0
投票

看来有两个问题。

如何使用Python不允许作为类元素的字段创建模型

为此,您依赖 patito 的依赖,pydantic 的

Field

你会的

from pydantic import Field

class model(pt.Model):
    name: str
    column1_or_any_allowable_name: int = Field(alias='column-1')

如何让模型验证忽略额外的列

似乎没有直接的方法可以做到这一点,但您可以使用模型属性来

select
相关列,如下所示

model.validate(df.select(model.schema()['properties'].keys()))

如果模型中的某个字段不作为

df
中的列存在,则极坐标将升高
ColumnNotFoundError
,这与
ValidationError
不同,因此如果您使用
try
except ValidationError
您还必须包含
except ColumnNotFoundError

© www.soinside.com 2019 - 2024. All rights reserved.