如何使用Pandera校验Pandas DataFrame并过滤保留全部有效行
Pandera 保留校验通过有效行的实现方案
你可以通过Pandera的懒校验模式收集所有错误行索引,再过滤得到有效数据,完整可运行代码如下:
import pandera as pa import pandas as pd import numpy as np # 预设Schema规则 schema: pa.DataFrameSchema = pa.DataFrameSchema(columns={ 'Col1': pa.Column(str), 'Col2': pa.Column(float, checks=pa.Check(lambda x: (0 <= x <= 1)), nullable=True), }) # 待校验测试数据 df: pd.DataFrame = pd.DataFrame({ "Col1": ["1", "2", "3", np.nan], "Col2": [0.3, 0.4, 5, 0.2], }) # 核心校验过滤逻辑 try: schema.validate(df, lazy=True) # 若无任何校验错误,直接用原df即可 valid_df = df except pa.errors.SchemaErrors as e: # 提取所有校验失败的行索引并去重 invalid_indexes = e.failure_cases["index"].unique() # 剔除错误行保留有效行 valid_df = df.drop(invalid_indexes) print(valid_df)
运行后输出结果和你预期完全一致:
Col1 Col2 0 1 0.3 1 2 0.4
逻辑说明
- 开启
lazy=True参数后,Pandera不会在校验到第一个错误时就中断,而是会收集全量校验错误后再抛出SchemaErrors异常 - 从异常的
failure_cases属性中可以拿到所有校验失败的行索引,去重后删除这些行即可得到全部符合规则的有效数据
内容的提问来源于stack exchange,提问作者Prashant Mishra
相关产品推荐
相关产品推荐

