Python利用Pandas按条件区间筛选并清理Excel数据
本文详细介绍如何使用Python的Pandas库读取Excel或CSV表格,通过设定各列数据的数值区间进行条件过滤。演示多条件独立筛选与批量合并筛选的代码实现,快速剔除不符合范围的异常样本行,保留核心数据并导出为新文件。
明确数据清洗目标
在实际数据分析与机器学习预处理中,原始表格往往包含大量超出合理物理范围或采集错误的记录。我们的核心任务是对特定属性列(如inf、NDVI等)设定允许的上下限,自动筛选出全部落在指定区间内的完整行,丢弃任何包含越界数值的样本,最终输出一份干净的结构化文件。

准备环境与基础配置
操作前请确保已安装pandas库。由于直接覆盖或修改源数据存在丢失风险,建议在运行筛选脚本前手动备份原始文件。配置好原始数据路径与目标输出路径后,即可进入逻辑编写阶段。
第1步:导入依赖与读取数据
该步骤的目的是加载文件并将表格转化为可操作的二维数据结构。pandas同时支持.csv与.xlsx格式,调用对应读取函数即可一次性载入全表。
# -*- coding: utf-8 -*-
import pandas as pd
# 定义原始数据与目标保存路径(请以实际目录为准)
original_file = "E:/your_path/source_data.csv"
result_file = "E:/your_path/cleaned_data.csv"
# 读取表格至DataFrame对象
df = pd.read_csv(original_file)
第2步:应用区间筛选逻辑
筛选的核心是根据各列阈值构造布尔掩码。此处提供两种等效的实现方式:链式逐列过滤适合逐步调试,单次复合逻辑则更适合生产环境直接输出。
方法A:链式连续筛选。每次使用逻辑与运算符&拼接上下限条件,直接对df对象赋值更新。此写法逻辑直观,便于排查某一列是否误删正常数据。
# 保留 inf 列在 -0.2 至 18 之间的数据
df = df[(df["inf"] >= -0.2) & (df["inf"] <= 18)]
# 保留 NDVI 列在 -1 至 1 之间的数据
df = df[(df["NDVI"] >= -1) & (df["NDVI"] <= 1)]
# 依次类推其他字段,直至所有属性校验完毕
df = df[(df["soil"] >= 0)]
方法B:单行复合筛选。将所有条件集中在一次索引操作中,提升执行效率。注意条件间需用括号严格分组,避免优先级错误。
result_df = result_df[
(result_df["blue"] > 0) & (result_df["blue"] <= 1) &
(result_df["green"] > 0) & (result_df["green"] <= 1) &
(result_df["red"] > 0) & (result_df["red"] <= 1) &
(result_df["inf"] > 0) & (result_df["inf"] <= 1) &
(result_df["NDVI"] > -1) & (result_df["NDVI"] < 1) &
(result_df["soil"] >= 0)
# 其他字段条件继续在此追加
]
第3步:导出清洗结果
确认筛选逻辑无误后,将过滤后的DataFrame写入新文件。index=False参数可避免保存默认的整数索引列,保持导出表格整洁。
df.to_csv(result_file, index=False)
完成判断与排错提示
运行成功后,打开result_file检查行数变化与关键列数值分布是否符合预期。若发现数据被过度清洗或脚本报错,请注意以下关键点:布尔运算中不可用Python关键字and替换符号&;若某列存在空值NaN,比较运算会返回False导致该行被意外丢弃,此时需先使用df.fillna()填补或使用df.dropna()移除缺失行;长路径中的反斜杠建议统一改用正斜杠/或原始字符串r"..."以避免转义冲突。
简要总结
通过设定明确的数值边界并利用Pandas的高效索引机制,可以自动化完成复杂表格的区间过滤工作。上述脚本结构清晰,参数可直接替换为业务指标,大幅降低人工排查异常样本的时间成本。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













