如何使用Pandera Schema验证pandas.Period类型的DataFrame列?
解决Pandera验证pandas.Period类型报错的方案
报错原因是Pandera默认引擎无法直接识别pd.Period原生类型,下面提供两种可行的解决方法:
方法一:自定义Check验证元素类型
通过pa.Check函数检查列中每个元素是否为pd.Period实例,还可以额外验证周期频率是否符合要求:
import pandas as pd import pandera as pa from pandera.typing import Series class Schema(pa.DataFrameModel): # 基础验证:确保所有元素都是pd.Period类型 period: Series[object] = pa.Check(lambda x: all(isinstance(i, pd.Period) for i in x)) # 进阶验证:同时确保频率为月频(根据需求调整) # period: Series[object] = pa.Check(lambda x: all(isinstance(i, pd.Period) for i in x)) & pa.Check(lambda x: all(i.freq == 'M' for i in x)) df = pd.DataFrame({"period" : pd.period_range("31/01/2024", "31/12/2024", freq='M')}) Schema.validate(df)
方法二:使用Pandera内置Period dtype(推荐)
Pandera提供了专门的Period dtype,支持直接指定类型和频率,更简洁规范:
import pandas as pd import pandera as pa from pandera.typing import Series from pandera.dtypes import Period class Schema(pa.DataFrameModel): # 直接指定为Period类型,且限定频率为月频 period: Series[Period(freq='M')] df = pd.DataFrame({"period" : pd.period_range("31/01/2024", "31/12/2024", freq='M')}) Schema.validate(df)
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

