Python 使用 Pandas 筛选 Excel 数据并剔除区间外值
背景与需求
在数据处理与分析的实际工作中,经常需要清理无效或异常数据。例如,传感器采集的读数可能因设备故障超出物理合理范围,或者图像特征值不符合预期的分布规律。为了保证后续模型训练或分析结果的准确性,我们需要一种方法来自动识别并删除这些不符合指定区间的数据行,仅保留有效样本。
本文将详细介绍如何使用 Python 强大的数据分析库 Pandas 高效完成这一任务,涵盖基础筛选、动态配置、查询方法以及异常处理等完整流程。
环境准备
首先,确保开发环境中已安装 Pandas 库。如果尚未安装,可通过 pip 命令进行安装:
pip install pandas openpyxl
其中 pandas 用于核心数据处理,openpyxl 是支持 .xlsx 格式读写所需的引擎。
基础筛选方法:链式布尔索引
最直接且易于理解的方式是对每一列分别应用过滤条件,然后取逻辑交集。这种方法逻辑直观,适合规则较少且固定的场景。
代码示例
import pandas as pd
# 定义文件路径(建议使用相对路径)
input_path = 'data/input.csv'
output_path = 'data/output_filtered.csv'
# 读取数据
try:
df = pd.read_csv(input_path)
except FileNotFoundError:
raise Exception("输入文件不存在")
# 依次应用筛选条件
# 假设 inf 列需要在 -0.2 到 18 之间
# 注意:Pandas 中必须使用 & 表示'且',不能用 and
df = df[(df["inf"] >= -0.2) & (df["inf"] <= 18)]
# 假设 NDVI 列需要在 -1 到 1 之间
df = df[(df["NDVI"] >= -1) & (df["NDVI"] <= 1)]
# 其他列同理,例如 soil 列需大于等于 0
df = df[(df["soil"] >= 0)]
# 保存结果
# index=False 避免保存行索引
df.to_csv(output_path, index=False)
print(f"筛选完成,共剩余 {len(df)} 行数据")


