假设我有一个.csv,它遵循以下格式:
姓名、薪资、部门、强制性
Rob,5500,航空,是
Bob,1000,设施,无
Tom,6000,IT,是
将其导出到pandas/modin后,我想执行行区分检查,其中:
-
在航空业工作的Rob的收入不能低于5000
-
在工厂工作的Bob的收入不能低于1000
-
无论谁在设施中工作,都必须报告自己的工资,而在航空或IT部门工作的人可以选择不报告工资。
-
如果违反了任何检查,我们将其存储在数据帧中,并将此案例转交给人力资源部门进行进一步调查。
如何使用Pandera验证此.csv?
根据您使用的API,您可以检查基于对象的API的宽检查或基于类的API的数据帧检查。
注意:下面的代码片段没有经过测试,但应该朝着正确的方向
基于类别的API:
import pandera as pa
from pandera.typing as Series
class Schema(pa.SchemaModel):
Name: Series[str]
Salary: Series[int]
Department: Series[str]
Mandatory: Series[str]
@pa.dataframe_check
def rob_aviation_check(cls, df) -> Series[bool]:
return df.loc[df["Name"] == "Rob" & df["Department"] == "Aviation", "Salary"] >= 5000
基于对象的API:
schema = DataFrameSchema(
columns={
"Name": pa.Column(str),
"Salary": Pa.Column(int),
...
}
checks=[
pa.Check(lambda df: df.loc[df["Name"] == "Rob" & df["Department"] == "Aviation", "Salary"] >= 5000)
]
)