使用Pandera模式验证pandas.Period

1 投票
2 回答
51 浏览
提问于 2025-04-14 17:55

我有一个数据表,其中有一列叫“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
  1. 你需要使用 PeriodDtype
  2. 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")})

你可以在 这里 阅读更多相关内容。

撰写回答