pandera.api.dataframe.container.DataFrameSchema

class pandera.api.dataframe.container.DataFrameSchema(columns=None, checks=None, parsers=None, index=None, dtype=None, coerce=False, strict=False, name=None, ordered=False, unique=None, report_duplicates='all', unique_column_names=False, add_missing_columns=False, title=None, description=None, metadata=None, drop_invalid_rows=False)[source]

与库无关的数据框架模式定义的基础类。

Parameters:
  • (映射 列名和列架构组件。) – 一个字典,其中键是列名,值是 列对象,指定特定列的数据类型和属性。

  • 检查 (Union[Check, List[Union[Check, Hypothesis]], None]) – 数据框范围内的检查。

  • 解析器 (联合[解析器, 列表[解析器], ]) – 数据框范围内的解析器。

  • 索引 – 指定索引的数据类型和属性。

  • dtype (可选[任何, ]) – 数据框的datatype。这将覆盖任何列中指定的数据类型。如果指定了字符串,则假定为有效的pandas字符串值之一: http://pandas.pydata.org/pandas-docs/stable/basics.html#dtypes

  • 强制转换 (bool) – 是否强制验证时的所有列。此设置会覆盖列或索引级别的任何强制设置。对dtype=None 的列没有影响。

  • 严格 (Union[bool, Literal[‘filter’]]) – 确保数据框中仅存在架构中定义的所有列。如果设置为‘filter’,只有架构中的列将被传递给验证的数据框。如果设置为filter且架构中定义的列不在数据框中,将抛出错误。

  • 名称 (可选[字符串, ]) – 模式的名称。

  • ordered (bool) – 是否验证列的顺序。

  • unique (Union[str, List[str], None]) – 应共同唯一的列列表。

  • report_duplicates (Union[Literal[‘exclude_first’], Literal[‘exclude_last’], Literal[‘all’]]) – 如何报告唯一错误 - exclude_first: 报告除第一个出现外的所有重复项 - exclude_last: 报告除最后一个出现外的所有重复项 - all: (默认)报告所有重复项

  • unique_column_names (bool) – 列名是否必须唯一。

  • add_missing_columns (bool) – 添加缺失的列名,如果在列模式中指定了默认值,则使用默认值,如果列可以为空,则使用NaN。

  • 标题 (可选[str, None]) – 一个可供人类阅读的模式标签。

  • 描述 (可选[str, None]) – 一个任意的模式文本描述。

  • 元数据 (可选[字典, ]) – 一个可选的键值数据。

  • drop_invalid_rows (bool) – 如果为 True,将在验证时删除无效行。

Raises:

SchemaInitError – 如果无法从参数构建架构

Examples:

>>> import pandera as pa
>>>
>>> schema = pa.DataFrameSchema({
...     "str_column": pa.Column(str),
...     "float_column": pa.Column(float),
...     "int_column": pa.Column(int),
...     "date_column": pa.Column(pa.DateTime),
... })

使用pandas API定义检查,该检查接受一个具有以下签名的函数:pd.Series -> Union[bool, pd.Series],输出系列包含布尔值。

>>> schema_withchecks = pa.DataFrameSchema({
...     "probability": pa.Column(
...         float, pa.Check(lambda s: (s >= 0) & (s <= 1))),
...
...     # check that the "category" column contains a few discrete
...     # values, and the majority of the entries are dogs.
...     "category": pa.Column(
...         str, [
...             pa.Check(lambda s: s.isin(["dog", "cat", "duck"])),
...             pa.Check(lambda s: (s == "dog").mean() > 0.5),
...         ]),
... })

请查看 这里 获取更多使用详情。

属性

BACKEND_REGISTRY

coerce

是否将系列强制转换为指定类型。

dtype

获取 dtype 属性。

dtypes

一个字典,其中键是列名,值是该列的 DataType

properties

获取用于序列化的架构属性。

unique

应该共同唯一的列列表。

方法

__init__(columns=None, checks=None, parsers=None, index=None, dtype=None, coerce=False, strict=False, name=None, ordered=False, unique=None, report_duplicates='all', unique_column_names=False, add_missing_columns=False, title=None, description=None, metadata=None, drop_invalid_rows=False)[source]

与库无关的数据框架模式定义的基础类。

Parameters:
  • (映射 列名和列架构组件。) – 一个字典,其中键是列名,值是 列对象,指定特定列的数据类型和属性。

  • 检查 (Union[Check, List[Union[Check, Hypothesis]], None]) – 数据框范围内的检查。

  • 解析器 (联合[解析器, 列表[解析器], ]) – 数据框范围内的解析器。

  • 索引 – 指定索引的数据类型和属性。

  • dtype (可选[任何, ]) – 数据框的datatype。这将覆盖任何列中指定的数据类型。如果指定了字符串,则假定为有效的pandas字符串值之一: http://pandas.pydata.org/pandas-docs/stable/basics.html#dtypes

  • 强制转换 (bool) – 是否强制验证时的所有列。此设置会覆盖列或索引级别的任何强制设置。对dtype=None 的列没有影响。

  • 严格 (Union[bool, Literal[‘filter’]]) – 确保数据框中仅存在架构中定义的所有列。如果设置为‘filter’,只有架构中的列将被传递给验证的数据框。如果设置为filter且架构中定义的列不在数据框中,将抛出错误。

  • 名称 (可选[字符串, ]) – 模式的名称。

  • ordered (bool) – 是否验证列的顺序。

  • unique (Union[str, List[str], None]) – 应共同唯一的列列表。

  • report_duplicates (Union[Literal[‘exclude_first’], Literal[‘exclude_last’], Literal[‘all’]]) – 如何报告唯一错误 - exclude_first: 报告除第一个出现外的所有重复项 - exclude_last: 报告除最后一个出现外的所有重复项 - all: (默认)报告所有重复项

  • unique_column_names (bool) – 列名是否必须唯一。

  • add_missing_columns (bool) – 添加缺失的列名,如果在列模式中指定了默认值,则使用默认值,如果列可以为空,则使用NaN。

  • 标题 (可选[str, None]) – 一个可供人类阅读的模式标签。

  • 描述 (可选[str, None]) – 一个任意的模式文本描述。

  • 元数据 (可选[字典, ]) – 一个可选的键值数据。

  • drop_invalid_rows (bool) – 如果为 True,将在验证时删除无效行。

Raises:

SchemaInitError – 如果无法从参数构建架构

Examples:

>>> import pandera as pa
>>>
>>> schema = pa.DataFrameSchema({
...     "str_column": pa.Column(str),
...     "float_column": pa.Column(float),
...     "int_column": pa.Column(int),
...     "date_column": pa.Column(pa.DateTime),
... })

使用pandas API定义检查,该检查接受一个具有以下签名的函数:pd.Series -> Union[bool, pd.Series],输出系列包含布尔值。

>>> schema_withchecks = pa.DataFrameSchema({
...     "probability": pa.Column(
...         float, pa.Check(lambda s: (s >= 0) & (s <= 1))),
...
...     # check that the "category" column contains a few discrete
...     # values, and the majority of the entries are dogs.
...     "category": pa.Column(
...         str, [
...             pa.Check(lambda s: s.isin(["dog", "cat", "duck"])),
...             pa.Check(lambda s: (s == "dog").mean() > 0.5),
...         ]),
... })

请查看 这里 获取更多使用详情。

add_columns(extra_schema_cols)[source]

创建一个 DataFrameSchema 的副本,包含额外的列。

Parameters:

extra_schema_cols (DataFrameSchema) – 附加格式的列

Return type:

Self

Returns:

一个新的 DataFrameSchema 添加了 extra_schema_cols。

Example:

要向模式添加列,请传递一个包含列名和 Column 实例键值对的字典。

>>> import pandera as pa
>>>
>>> example_schema = pa.DataFrameSchema(
...    {
...        "category": pa.Column(str),
...        "probability": pa.Column(float),
...    }
... )
>>> print(
...     example_schema.add_columns({"even_number": pa.Column(pa.Bool)})
... )
<Schema DataFrameSchema(
    columns={
        'category': <Schema Column(name=category, type=DataType(str))>
        'probability': <Schema Column(name=probability, type=DataType(float64))>
        'even_number': <Schema Column(name=even_number, type=DataType(bool))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=None,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>
coerce_dtype(check_obj)[source]

将对象强制转换为期望的类型。

Return type:

~T数据对象

classmethod from_json(source)[source]

从json文件创建DataFrameSchema。

Parameters:

source – str,指向json模式的路径,或序列化的yaml字符串。

Return type:

Self

Returns:

数据框架模式。

classmethod from_yaml(yaml_schema)[source]

从yaml文件创建DataFrameSchema。

Parameters:

yaml_schema – str, yaml架构的路径,或序列化的yaml字符串。

Return type:

Self

Returns:

数据框架模式。

get_dtypes(check_obj)[source]

dtype属性相同,但根据提供的数据帧扩展regex == True的列。

Return type:

Dict[str, DataType]

Returns:

列及其关联数据类型的字典。

get_metadata()[source]

提供列和模式级别的元数据

Return type:

可选[字典, ]

remove_columns(cols_to_remove)[source]

DataFrameSchema中移除列并返回一个新的副本。

Parameters:

cols_to_remove (列表) - 要从DataFrameSchema中移除的列

Return type:

Self

Returns:

一个新的 DataFrameSchema,不包含 cols_to_remove

Raises:

SchemaInitError:如果列不在架构中。

Example:

要从模式中删除一列或一组列,请传递要删除的列的列表:

>>> import pandera as pa
>>>
>>> example_schema = pa.DataFrameSchema(
...     {
...         "category" : pa.Column(str),
...         "probability": pa.Column(float)
...     }
... )
>>>
>>> print(example_schema.remove_columns(["category"]))
<Schema DataFrameSchema(
    columns={
        'probability': <Schema Column(name=probability, type=DataType(float64))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=None,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>

另见

add_columns()

rename_columns(rename_dict)[source]

使用键值对字典重命名列。

Parameters:

rename_dict (Dict[str, str]) – ‘旧名称’: ‘新名称’ 键值对字典。

Return type:

Self

Returns:

DataFrameSchema (原始的副本)

Raises:

SchemaInitError 如果列不在架构中。

Example:

要重命名列或一组列,请传递一个包含旧列名和新列名的字典,类似于 pandas DataFrame 方法。

>>> import pandera as pa
>>>
>>> example_schema = pa.DataFrameSchema({
...     "category" : pa.Column(str),
...     "probability": pa.Column(float)
... })
>>>
>>> print(
...     example_schema.rename_columns({
...         "category": "categories",
...         "probability": "probabilities"
...     })
... )
<Schema DataFrameSchema(
    columns={
        'categories': <Schema Column(name=categories, type=DataType(str))>
        'probabilities': <Schema Column(name=probabilities, type=DataType(float64))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=None,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>
reset_index(level=None, drop=False)[source]

重置DataFrameSchemaIndex的方法

Parameters:
Return type:

Self

Returns:

一个新的 DataFrameSchema 带有指定的列作为索引。

Raises:

SchemaInitError 如果在模式中未设置索引。

Examples:

类似于 pandas 的 reset_index 方法在 pandas DataFrame 上,此方法可用于完全或部分重置 schema 的索引。

要从模式中移除整个索引,只需调用 reset_index 方法,使用默认参数。

>>> import pandera as pa
>>>
>>> example_schema = pa.DataFrameSchema(
...     {"probability" : pa.Column(float)},
...     index = pa.Index(name="unique_id", dtype=int)
... )
>>>
>>> print(example_schema.reset_index())
<Schema DataFrameSchema(
    columns={
        'probability': <Schema Column(name=probability, type=DataType(float64))>
        'unique_id': <Schema Column(name=unique_id, type=DataType(int64))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=None,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>

这将一个索引(或多个索引)重新分类为一个列(或多列)。

同样,要部分更改索引,将您希望删除的列的名称传递给 level 参数,并且您还可以决定是否通过 drop 参数删除这些级别。

>>> example_schema = pa.DataFrameSchema({
...     "category" : pa.Column(str)},
...     index = pa.MultiIndex([
...         pa.Index(name="unique_id1", dtype=int),
...         pa.Index(name="unique_id2", dtype=str)
...         ]
...     )
... )
>>> print(example_schema.reset_index(level = ["unique_id1"]))
<Schema DataFrameSchema(
    columns={
        'category': <Schema Column(name=category, type=DataType(str))>
        'unique_id1': <Schema Column(name=unique_id1, type=DataType(int64))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=<Schema Index(name=unique_id2, type=DataType(str))>,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>

另见

set_index()

select_columns(columns)[source]

选择模式中的列子集。

版本 0.4.5 中的新特性

Parameters:

columns (List[Any]) – 选择的列名列表。

Return type:

Self

Returns:

DataFrameSchema (原始的副本)仅包含所选的列,按照指定的顺序。

Raises:

SchemaInitError 如果列不在架构中。

Example:

通过列对模式进行子集化和重新排序,并返回一个新模式:

>>> import pandera as pa
>>>
>>> example_schema = pa.DataFrameSchema({
...     "category": pa.Column(str),
...     "probability": pa.Column(float),
...     "timestamp": pa.Column(pa.DateTime)
... })
>>>
>>> print(example_schema.select_columns(['probability', 'category']))
<Schema DataFrameSchema(
    columns={
        'probability': <Schema Column(name=probability, type=DataType(float64))>
        'category': <Schema Column(name=category, type=DataType(str))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=None,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>

注意

如果架构中存在索引,它也会被包含在新的架构中。列将重新排序以匹配columns中的顺序。

set_index(keys, drop=True, append=False)[source]

一个通过现有的Column或列的列表设置IndexDataFrameSchema的方法。

Parameters:
  • keys (List[str]) – 标签列表

  • drop (布尔) – 布尔, 默认 True

  • append (布尔值) – 布尔值,默认值为 False

Return type:

Self

Returns:

一个新的 DataFrameSchema,具有指定的列在索引中。

Raises:

SchemaInitError 如果列不在架构中。

Examples:

就像您可以从现有列中设置 pandas DataFrame 的索引一样,您可以从架构中的现有列设置架构中的索引。

>>> import pandera as pa
>>>
>>> example_schema = pa.DataFrameSchema({
...     "category" : pa.Column(str),
...     "probability": pa.Column(float)})
>>>
>>> print(example_schema.set_index(['category']))
<Schema DataFrameSchema(
    columns={
        'probability': <Schema Column(name=probability, type=DataType(float64))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=<Schema Index(name=category, type=DataType(str))>,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>

如果您在您的模式中有一个现有的索引,并且您想要将一个新列附加为该索引(生成一个 Multiindex),只需像在 pandas 中那样使用 set_index。

>>> example_schema = pa.DataFrameSchema(
...     {
...         "column1": pa.Column(str),
...         "column2": pa.Column(int)
...     },
...     index=pa.Index(name = "column3", dtype = int)
... )
>>>
>>> print(example_schema.set_index(["column2"], append = True))
<Schema DataFrameSchema(
    columns={
        'column1': <Schema Column(name=column1, type=DataType(str))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=<Schema MultiIndex(
        indexes=[
            <Schema Index(name=column3, type=DataType(int64))>
            <Schema Index(name=column2, type=DataType(int64))>
        ]
        coerce=False,
        strict=False,
        name=None,
        ordered=True
    )>,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>

另见

reset_index()

to_json(target: None = None, **kwargs) str[source]
to_json(target: PathLike, **kwargs) None

将 DataFrameSchema 写入 json 文件。

Parameters:

目标 (可选[路径类似, ]) – 要写入的文件目标。如果为无,则输出为字符串。

Return type:

可选[str, None]

Returns:

如果目标是 None,则返回 json 字符串,否则返回 None。

to_script(fp=None)[source]

将 DataFrameSchema 写入 python 脚本。

Parameters:

路径 – str,写入脚本的路径

Return type:

Self

Returns:

数据框架模式。

to_yaml(stream=None)[source]

将 DataFrameSchema 写入 yaml 文件。

Parameters:

(可选[路径类似, ]) – 要写入的文件流。如果为无,则转储为字符串。

Return type:

可选的[str, None]

Returns:

如果流为 None,则返回 yaml 字符串,否则返回 None。

update_column(column_name, **kwargs)[source]

创建一个DataFrameSchema的副本,并更新列属性。

Parameters:
  • 列名 (str)

  • kwargs – 传递给 Column 的关键字参数

Return type:

Self

Returns:

一个新的 DataFrameSchema 具有更新的列

Raises:

SchemaInitError:如果列不在模式中或者您尝试更改名称。

Example:

调用 schema.1 返回带有更新列的 DataFrameSchema

>>> import pandera as pa
>>>
>>> example_schema = pa.DataFrameSchema({
...     "category" : pa.Column(str),
...     "probability": pa.Column(float)
... })
>>> print(
...     example_schema.update_column(
...         'category', dtype=pa.Category
...     )
... )
<Schema DataFrameSchema(
    columns={
        'category': <Schema Column(name=category, type=DataType(category))>
        'probability': <Schema Column(name=probability, type=DataType(float64))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=None,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>
update_columns(update_dict)[source]

创建一个DataFrameSchema的副本,并更新列属性。

Parameters:

update_dict (字典[字符串, 字典[字符串, 任意]])

Return type:

Self

Returns:

一个带有更新列的新 DataFrameSchema

Raises:

SchemaInitError: 如果列不在架构中或者您尝试更改名称。

Example:

调用 schema.update_columns 返回带有更新列的 DataFrameSchema

>>> import pandera as pa
>>>
>>> example_schema = pa.DataFrameSchema({
...     "category" : pa.Column(str),
...     "probability": pa.Column(float)
... })
>>>
>>> print(
...     example_schema.update_columns(
...         {"category": {"dtype":pa.Category}}
...     )
... )
<Schema DataFrameSchema(
    columns={
        'category': <Schema Column(name=category, type=DataType(category))>
        'probability': <Schema Column(name=probability, type=DataType(float64))>
    },
    checks=[],
    parsers=[],
    coerce=False,
    dtype=None,
    index=None,
    strict=False,
    name=None,
    ordered=False,
    unique_column_names=False,
    metadata=None,
    add_missing_columns=False
)>
__call__(dataframe, head=None, tail=None, sample=None, random_state=None, lazy=False, inplace=False)[source]

此为 DataFrameSchema.validate() 方法的别名。

Parameters:
  • dataframe (pd.DataFrame) – 需要验证的数据框。

  • head (int) – 验证前 n 行。与 tailsample 重叠的行会被去重。

  • tail (int) – 验证最后 n 行。与 headsample 重叠的行会被去重。

  • 示例 (可选[int, None]) – 验证 n 行的随机样本。与 头部尾部 交叠的行会被去重。

  • random_state (可选[int, ]) – sample 参数的随机种子。

  • 懒惰 (bool) – 如果为 True,懒惰地对数据框进行所有验证检查,并引发一个 SchemaErrors。否则,立即抛出第一个出现的 SchemaError

  • inplace (bool) – 如果为 True,则对验证对象应用强制转换,否则创建数据的副本。

Return type:

~T数据对象