我想验证给定的 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"
看来有两个问题。
为此,您依赖 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
。