如何用Pandera校验含float或int类型的Pandas列?
Pandera 支持float/int混合类型列的Schema配置方法
Pandera的SchemaModel不直接识别Python原生的Union[float, int]或float | int作为Series的泛型参数,你可以通过以下两种方式实现需求:
方案一:使用Pandera内置数据类型联合
直接用Pandera提供的pa.Float和pa.Int类型进行联合,这是最贴合Pandera类型系统的方式:
import pandera as pa from pandera.typing import DataFrame, Series import pandas as pd class IngestSchema(pa.SchemaModel): column_header: Series[pa.Float | pa.Int] = pa.Field(alias='MY HEADER') # 验证测试 df_int = pd.DataFrame({'MY HEADER': [1, 2, 3]}) IngestSchema.validate(df_int) # 成功通过 df_float = pd.DataFrame({'MY HEADER': [1.2, 3.0, 5.7]}) IngestSchema.validate(df_float) # 成功通过
方案二:自定义校验规则
如果需要更灵活的类型检查逻辑,可以通过pa.Check函数自定义校验器:
import pandera as pa from pandera.typing import DataFrame, Series import pandas as pd # 自定义类型检查函数 def check_float_or_int(value): return isinstance(value, (int, float)) class IngestSchema(pa.SchemaModel): column_header: Series[object] = pa.Field( alias='MY HEADER', check=pa.Check(check_float_or_int) ) # 验证测试 df_int = pd.DataFrame({'MY HEADER': [1, 2, 3]}) IngestSchema.validate(df_int) df_float = pd.DataFrame({'MY HEADER': [1.2, 3.0, 5.7]}) IngestSchema.validate(df_float)
补充说明
如果你的数据包含空值,可对应使用Pandera的Nullable类型(如pa.Int64、pa.Float64),适配pandas的Int64/Float64 dtype。
内容的提问来源于stack exchange,提问作者wdchild
相关产品推荐
相关产品推荐

