modules.dataClean 模块帮助
本章节包含 modules.dataClean 包中常用「数据清洗 / 质量检查」模块的使用说明和示例,例如:
按列策略检查表或
ResultModel中的空值,并在发现问题时报错或告警
NullValueChecker
模块简介与适用场景
NullValueChecker按列策略检查指定字段是否存在空值,并按策略报错、告警或忽略。不修改数据:输入对象原样从
OutputTable传出,适合作为读写、统计、绘图前的质量门禁。支持
TableData、TableCollection和ResultModel;列名 / 表名均可写内部名或显示标题。典型适用场景:
从 GDIM 读入业务表后,确认主键、坐标、关键计算结果不为空;
写入 GDIM 或生成报告前,对关键字段做空值门禁;
对计算结果
ResultModel中的标量字段或列表字段做空值检查。
关键提醒:整列为空时只走
all_null_action,部分为空才走any_null_action;遇到第一个error会立即停止。列策略形状与空值判定见后文说明。
端口说明
输入端口 -
InputTable:待检查的TableData、TableCollection或ResultModel。为None时不检查,OutputTable亦为None。输出端口 -
OutputTable:与输入为**同一对象**(不拷贝、不改写)。输入为None时为None。
快速上手示例:检查单表指定列
from gdisdk.dataclass.tables import TableData
from gdisdk.modules.dataClean import NullCheckPolicy, NullValueChecker
table = TableData(
{"bore_id": ["ZK1", None, "ZK3"], "depth": [12.0, 15.0, 18.0]},
name="bore_table",
title="钻孔表",
)
checker = NullValueChecker(mname="CheckNulls")
checker.InputTable = table
checker.column_policies = {
"bore_id": NullCheckPolicy(any_null_action="error"),
"depth": {}, # 空 dict 使用默认策略:整列空则报错,部分空则发出 GDI 数据质量告警
}
checker.execute()
out_table = checker.OutputTable.data # 与输入 table 是同一对象
快速上手示例:检查表集合中的指定表
TableCollection 必须按表嵌套配置;未列入的表不会被检查。
from gdisdk.modules.dataClean import NullCheckPolicy, NullValueChecker
checker = NullValueChecker(mname="CheckCollectionNulls")
checker.InputTable = tables # TableCollection
checker.column_policies = {
"钻孔表": {
"钻孔编号": NullCheckPolicy(any_null_action="error"),
"孔口高程": {"any_null_action": "gdi_warning"},
},
"地层表": {
"层号": {"all_null_action": "error", "any_null_action": "warning"},
},
}
checker.execute()
out_tables = checker.OutputTable.data
快速上手示例:检查 ResultModel 字段
from gdisdk.dataclass.results import ResultModel, UnitField
from gdisdk.modules.dataClean import NullCheckPolicy, NullValueChecker
result = ResultModel.from_dict(
{"bearing_capacity": 150.0, "note": "", "layers": ["粘土", None]},
model_name="BearingResult",
model_title="承载力计算",
fields_meta={
"bearing_capacity": UnitField(title="承载力特征值"),
"note": UnitField(title="备注"),
"layers": UnitField(title="土层"),
},
)
checker = NullValueChecker(mname="CheckResultNulls")
checker.InputTable = result
checker.column_policies = {
"承载力特征值": NullCheckPolicy(all_null_action="error"),
"备注": {"all_null_action": "gdi_warning"},
"土层": {"any_null_action": "gdi_warning"},
}
checker.execute()
out_result = checker.OutputTable.data
参数说明
参数名 |
类型 |
默认值 |
说明 |
|---|---|---|---|
|
|
|
构造时可直接赋给 |
|
|
|
按列 / 字段配置检查策略。值为 |
|
|
|
被检查的表行数为 0 时的处理方式。触发后跳过该表的列空值检查( |
|
|
|
空表时的自定义消息。占位符: |
|
|
|
是否将空字符串 |
|
|
|
是否将空列表 |
列策略说明
column_policies 的形状随输入类型变化;键均可写内部名(name)或显示标题(title)。
输入类型 |
配置形态 |
行为摘要 |
|---|---|---|
|
|
只检查列出的列;未列出的列不检查。列不存在时抛出 |
|
|
只检查列出的字段;字段不存在时抛出 |
|
|
只检查列出的表;未列出的表跳过。表不存在时抛出 |
策略可用 NullCheckPolicy(...) 或 dict。空 dict``(``{})等价于全部使用默认值:
字段 |
类型 |
默认值 |
说明 |
|---|---|---|---|
|
|
|
该列 / 字段**全部为空**时的处理方式。 |
|
|
|
该列 / 字段**部分为空**(有空值但并非全部为空)时的处理方式。 |
|
|
|
全部为空时的自定义消息。占位符: |
|
|
|
部分为空时的自定义消息。占位符同上。 |
空值判定与动作说明
视为空值的取值:
None、NaN、NaT、pd.NA;当treat_empty_string_as_null=True``(默认)时,空字符串 ``""也视为空值;当treat_empty_list_as_null=True``(默认)时,空列表 ``[]和空元组()也视为空值。仅空格的字符串 **不**视为空值。
整列 / 整个列表为空时,只触发
all_null_action,不会再触发any_null_action。ResultModel的标量字段若为空,按「全部为空」处理(null_count = total_count = 1)。ResultModel的list/tuple字段:若整个值是空列表 / 空元组且treat_empty_list_as_null=True,按「全部为空」处理;否则按元素逐项计数。动作含义:
"error":抛出ValueError,立即停止后续列 / 表 / 字段检查;"warning":发出UserWarning,继续检查;"gdi_warning":发出 ``GDIDataQualityWarning``(可在 GDIM 界面展示),继续检查;"ignore":不提示、不中断。
默认中文消息示例:
'钻孔表' 的 '钻孔编号' 列存在空值(1/3)。{table}取表标题(或ResultModel的模型标题),{column}取列 / 字段标题。
空表处理说明
仅对
TableData,以及TableCollection中**已列入**column_policies的表生效;ResultModel没有「空表」这一动作。模块会先解析策略中的列名。列不存在时,即使表为空也会先抛出
KeyError。列均能解析且行数为 0 时,按
empty_table_action处理,然后**跳过**该表的列空值检查。因此空表不会再按「整列为空」触发all_null_action。即使
column_policies为空,空的TableData仍会触发empty_table_action。默认消息:
'{table}' 为空表,没有数据。
在 pipeline 中的使用方式
from gdisdk.pipeline import PipeLine
from gdisdk.modules.readers import GdimTableReader
from gdisdk.modules.dataClean import NullCheckPolicy, NullValueChecker
pipeline = PipeLine(app_name="NullCheckDemo", app_title="空值检查示例")
pipeline.update_gdim_state(token="你的GDIM Token", proj_id="你的GDIM项目ID")
read_tables = GdimTableReader("ReadTables")
read_tables.table_fields = ["钻孔表"]
read_tables.output_table_name = "钻孔表"
checker = NullValueChecker("CheckNulls")
checker.column_policies = {
"钻孔编号": NullCheckPolicy(any_null_action="error"),
"孔口高程": {"any_null_action": "gdi_warning"},
}
pipeline.add_links(read_tables.OutputTable >> checker.InputTable)
pipeline.add_module(read_tables)
pipeline.add_module(checker)
pipeline.run()
table = checker.OutputTable.data
更多信息