1. 课程导入与环保数据清洗全景

在环保业务中,数据从来不是“天然干净”的。一个地级市的生态环境局,一年可能要处理来自几十个空气质量自动监测站、上百家重点排污单位、若干手工监测台账以及第三方运维记录的数据。这些数据最终往往以 CSV 或 Excel 的形式汇聚到业务人员手中,而它们的字段名、单位、时间格式、编码方式、缺失标记几乎各不相同。本课程要解决的核心问题就是:如何用可复用的自动化手段,把这类杂乱数据批量清洗成结构统一、可直接分析或上报的规范数据。

一、环保数据的三个典型来源

理解数据来源,是设计清洗规则的前提。不同来源的数据,“脏”的方式完全不同。

监测站数据通常由自动监测设备定时上传,常见形态是小时均值或分钟值。它的特点是量大、时间连续、字段相对固定,但容易出现设备故障导致的异常值(如 PM2.5 出现 9999 或负数)、停机造成的缺测、以及跨零点时间戳错位。字段名多为英文缩写,如 PM2_5、SO2、AQI、TimePoint。

企业上报数据多由排污单位按模板填报,常见于 Excel。它的特点是字段中文名不统一(“化学需氧量”“COD”“CODcr”混用)、单位不统一(mg/L 与 g/L 并存)、日期写成“2024.3.5”“2024年3月5日”等多种形式,还常有合并单元格、表头占多行的问题。

手工记录数据来自现场采样、巡检台账,往往先纸质后录入,容易出现前后空格、全角字符、同一监测点名称写法不一致(“城东污水厂”与“城东污水处理厂”),以及用“—”“/”“无”表示缺失。

判断一份环保数据该怎么清洗,第一步不是打开代码,而是先确认它的来源。来源决定了你要重点防范哪几类问题:监测站防异常值与缺测,企业上报防字段与单位混乱,手工记录防文本不规范。

二、CSV 与 Excel 在环保业务中的角色分工

两者都是表格数据载体,但在环保业务链条中承担的角色不同。CSV 是纯文本、轻量、易被程序批量读写,适合作为数据交换与自动化处理的中间格式;Excel 支持多工作表、格式、公式和人工填报,适合作为人工录入与对外报送的载体。因此一个务实的做法是:接收环节保留原始 Excel 不动,清洗时统一转换为 CSV 或 DataFrame 处理,输出时再按上报要求生成 Excel。这样既保护了原始凭证,又让批处理逻辑保持简单。

需要特别注意编码问题。国内环保系统导出的 CSV 常见 GBK 编码,直接用默认 UTF-8 读取会出现乱码。读取时应显式指定编码,例如:

import pandas as pd

# 先探测编码,再读取;errors='replace' 可避免个别坏字节中断整批处理
df = pd.read_csv("station_hourly_202403.csv", encoding="gbk")
df_excel = pd.read_excel("enterprise_report_202403.xlsx", sheet_name="排放数据", header=2)

上面 header=2 就是在应对企业报表“前两行是标题和说明、第三行才是真正表头”的常见情况。

三、批量清洗自动化的价值与整体流程框架

如果只有一两个文件,手工在 Excel 里删空格、改日期也能完成。但环保业务的数据量往往是“按区县、按月份、按站点”成批到来的,手工处理既慢又不可追溯,同一批数据两个人做可能得到两个结果。批量清洗自动化的价值体现在三点:一致性(同一规则对所有文件生效)、可追溯(每一步处理有日志、有清洗前后对照)、可复用(下个月新数据直接跑同一套脚本)。

整体流程可以概括为“接入—规整—校验—输出”四个环节,下图展示了数据从多源进入、经过统一处理、最终产出规范数据与问题清单的完整链路。

环保数据批量清洗整体流程框架 数据来源 监测站自动数据 小时值 / 分钟值 · CSV 企业上报数据 多工作表 · Excel 手工记录台账 纸质录入 · 文本不规范 ① 接入 批量读取文件 识别编码 GBK/UTF-8 定位真实表头行 保留原始文件备份 记录文件清单 ② 规整 字段名统一映射 单位换算统一 日期时间标准化 去空格 / 全角转半角 缺失标记归一 ③ 校验 数值范围检查 异常值标记 缺测识别 重复记录检测 生成问题清单 输出 规范数据 CSV / Excel 统一字段 问题清单 异常 / 缺测 待人工复核 贯穿全流程的三条原则 原始数据只读不改:所有清洗结果另存,原始文件与处理日志一并归档,保证可追溯。 规则集中定义:字段映射表、单位换算表、异常阈值写成配置,而不是散落在代码各处。 异常不静默丢弃:被判定为异常或缺失的记录进入问题清单,交由业务人员复核,而非直接删除。

以图中“校验”环节为例,一个可落地的判断逻辑是:对 PM2.5 小时值,若数值小于 0 或大于 1000 μg/m³,则标记为疑似异常;若字段为空或为“—”,则标记为缺测。这两类记录都不直接删除,而是写入问题清单,附上站点编号、时间点和原始值,供人工确认。这样既保证了主数据表的整洁,又不会把可能有价值的信息悄悄抹掉。

四、本课程的学习目标

学完本课程,你应当能够独立完成一条从原始文件到规范数据的处理链。具体包括:识别环保数据中的常见质量问题并判断其成因;用 Python 的 pandas 等工具批量读取 CSV 与 Excel,处理编码、表头、多工作表等接入问题;建立字段映射与单位换算规则,统一时间与文本格式;编写数值范围与缺失校验逻辑,输出问题清单;把整套流程封装为可重复运行的脚本,并对结果做基本核对。课程后续会围绕这些能力逐步展开,从单文件处理走向多文件批处理,再到规则配置化与结果复核。

需要提醒的是,自动化清洗并不能替代业务判断。哪些值算异常、缺失该补还是该留空、单位换算的基准是什么,这些都需要结合具体的监测指标和上报规范来确定。工具负责高效执行规则,人负责定义规则并对结果负责——这是贯穿整个课程的基本分工。