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) – 是否验证列的顺序。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。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_REGISTRYcoerce是否将系列强制转换为指定类型。
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) – 是否验证列的顺序。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。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 )>
- 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:
数据框架模式。
- 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 )>
- rename_columns(rename_dict)[source]¶
使用键值对字典重命名列。
- Parameters:
- 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]¶
重置
DataFrameSchema的Index的方法- 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 )>
另见
- select_columns(columns)[source]¶
选择模式中的列子集。
版本 0.4.5 中的新特性
- Parameters:
- 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或列的列表设置Index的DataFrameSchema的方法。- Parameters:
- Return type:
Self- Returns:
一个新的
DataFrameSchema,具有指定的列在索引中。- Raises:
SchemaInitError如果列不在架构中。- Examples:
就像您可以从现有列中设置
pandasDataFrame 的索引一样,您可以从架构中的现有列设置架构中的索引。>>> 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 )>
- to_json(target: None = None, **kwargs) str[source]¶
- to_json(target: PathLike, **kwargs) None
将 DataFrameSchema 写入 json 文件。
- to_script(fp=None)[source]¶
将 DataFrameSchema 写入 python 脚本。
- Parameters:
路径 – str,写入脚本的路径
- Return type:
Self- Returns:
数据框架模式。
- update_column(column_name, **kwargs)[source]¶
创建一个
DataFrameSchema的副本,并更新列属性。- Parameters:
- 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:
- 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()方法的别名。