使用Pandera模式验证pandas.Period
我有一个数据表,其中有一列叫“Period”,这列应该是 pandas.Period 类型。
我想用 Pandera Schema 来验证这一点(可以使用 DataFrameModel 或 DataFrameSchema)。
到目前为止,我的尝试都返回了错误。
如果我尝试下面的代码,就会出现错误:
Data type '<class 'pandas._libs.tslibs.period.Period'>' not understood by Engine.
代码:
import pandas as pd
import pandera as pa
from pandera.typing import Series
class Schema(pa.DataFrameModel):
period: Series[pd.Period]
df = pd.DataFrame({"period" : pd.period_range("31/01/2024", "31/12/2024", freq='M')})
Schema.validate(df)
任何建议都非常感谢!
2 个回答
0
你能看看这个解决方案吗?
import pandas as pd
import pandera as pa
from pandera import Column, Check
def is_period(series): return series.apply(lambda x: isinstance(x, pd.Period)).all()
schema = pa.DataFrameSchema({ "period": Column(object, checks=Check(is_period)), })
df = pd.DataFrame({"period": pd.period_range("31/01/2024", "31/12/2024", freq='M')})
schema.validate(df)
1
- 你需要使用
PeriodDtype
; PeriodDtype
需要一个参数freq
,这个参数需要用typing.Annotated
来指定:
from typing import Annotated
class Schema(pa.DataFrameModel):
period: Series[Annotated[pd.PeriodDtype, "M"]] # <= change this
df = pd.DataFrame({"period": pd.period_range("31/01/2024", "31/12/2024", freq="M")})
你可以在 这里 阅读更多相关内容。