Python基于指定范围筛选并剔除Excel表格中的数据

news/2024/11/24 14:12:29/

  本文介绍基于Python语言,读取Excel表格文件,基于我们给定的规则,对其中的数据加以筛选,将不在指定数据范围内的数据剔除,保留符合我们需要的数据的方法。

  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件(在本文中我们就以.csv格式的文件为例),如下图所示。

  其中,Excel表格文件具有大量的数据,每一列表示某一种属性每一行表示某一个样本;我们需要做的,就是对于其中的部分属性加以数据筛选——例如,我们希望对上图中第一列的数据进行筛选,将其中大于2或小于-1的部分选出来,并将每一个所选出的单元格对应的直接删除;同时,我们还希望对其他的属性同样加以筛选,不同属性筛选的条件也各不相同,但都是需要将不符合条件的单元格所在的整行都删除。最终,我们保留下来的数据,就是符合我们需要的数据,此时我们需要将其保存为一个新的Excel表格文件。

  明白了需求,我们即可开始代码的撰写;本文用到的具体代码如下所示。

# -*- coding: utf-8 -*-
"""
Created on Wed Jun  7 15:40:50 2023@author: fkxxgis
"""import pandas as pdoriginal_file = "E:/01_Reflectivity/99_Model_Training/00_Data/02_Extract_Data/23_Train_model_NoH/Train_Model_1_NoH.csv"
result_file = "E:/01_Reflectivity/99_Model_Training/00_Data/02_Extract_Data/23_Train_model_NoH/Train_Model_1_NoH_New.csv"df = pd.read_csv(original_file)df = df[(df["inf"] >= -0.2) & (df["inf"] <= 18)]
df = df[(df["NDVI"] >= -1) & (df["NDVI"] <= 1)]
df = df[(df["inf_dif"] >= -0.2) & (df["inf_dif"] <= 18)]
df = df[(df["NDVI_dif"] >= -2) & (df["NDVI_dif"] <= 2)]
df = df[(df["soil"] >= 0)]
df = df[(df["inf_h"] >= -0.2) & (df["inf_h"] <= 18)]
df = df[(df["ndvi_h"] >= -1) & (df["ndvi_h"] <= 1)]
df = df[(df["inf_h_dif"] >= -0.2) & (df["inf_h_dif"] <= 18)]
df = df[(df["ndvi_h_dif"] >= -1) & (df["ndvi_h_dif"] <= 1)]df.to_csv(result_file, index = False)

  下面是对上述代码每个步骤的解释:

  1. 导入必要的库:导入了pandas库,用于数据处理和操作。
  2. 定义文件路径:定义了原始文件路径original_file和结果文件路径result_file
  3. 读取原始数据:使用pd.read_csv()函数读取原始文件数据,并将其存储在DataFrame对象df中。
  4. 数据筛选:对DataFrame对象df进行多个条件的筛选操作,使用了逻辑运算符&和比较运算符进行条件组合。例如,其中的第一行df["inf"] >= -0.2df["inf"] <= 18就表示筛选出"inf"列的值在-0.218之间的数据;第二行df["NDVI"] >= -1df["NDVI"] <= 1则表示筛选出"NDVI"列的值在-11之间的数据,以此类推。
  5. 保存结果数据:使用to_csv()函数将筛选后的DataFrame对象df保存为新的.csv文件,保存路径为result_file,并设置index=False以避免保存索引列。

  当然,如果我们需要对多个属性(也就是多个列)的数据加以筛选,除了上述代码中的方法,我们还可以用如下所示的代码,较之前述代码会更方便一些。

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["inf_dif"] > -1) & (result_df["inf_dif"] < 1) &(result_df["NDVI_dif"] > -2) & (result_df["NDVI_dif"] < 2) &(result_df["soil"] >= 0) &(result_df["NDVI_dif"] > -2) & (result_df["NDVI_dif"] < 2) &(result_df["inf_h_dif"] > -1) & (result_df["inf_h_dif"] < 1) &(result_df["ndvi_h_dif"] > -1) & (result_df["ndvi_h_dif"] < 1)]

  上述代码可以直接对DataFrame对象加以一次性的筛选,不用每筛选一次就保存一次了。

  运行本文提及的代码,我们即可在指定的结果文件夹下获得数据筛选后的文件了。

  至此,大功告成。

欢迎关注:疯狂学习GIS


http://www.ppmy.cn/news/283591.html

相关文章

Linux ARM平台开发系列讲解(网络篇) 2.1 Marvell 88EA6321/6320 Switch 数据手册阅读之了解芯片功能

1. 概述 注意:88EA6321/88EA6320 和 88E6321/88E6320软件上无区别,区别在于硬件外围电源上 Marvell 88EA6321/88EA6320设备是一个集成了7端口千兆以太网交换机的单芯片,带有两个集成的千兆以太网收发器。该设备支持最新的IEEE 802.1音频视频桥接(AVB)标准。这些设备使用这…

如何使用ebpf kprobe探测内核函数

前言 在这之前, 我也曾使用过ebpf来改造我自己的项目, 最后也成功引入了项目, 有兴趣的同学可以查看此文章. 如何用ebpf开启tun网卡的TUNSETSTEERINGEBPF功能_我不买vip的博客-CSDN博客 但是该文章里并没有实质性的内容, 比如ebpf的map未曾涉及, 探测类型也未曾涉及, 只是一个空…

网络协议分析(2)判断两个ip数据包是不是同一个数据包分片

一个节点收到两个IP包的首部如下&#xff1a; &#xff08;1&#xff09;45 00 05 dc 18 56 20 00 40 01 bb 12 c0 a8 00 01 c0 a8 00 67 &#xff08;2&#xff09;45 00 00 15 18 56 00 b9 49 01 e0 20 c0 a8 00 01 c0 a8 00 67 分析并判断这两个IP包是不是同一个数据报的分片…

leetcode周赛第二题6230. 长度为 K 子数组中的最大和

题目&#xff1a; 给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和&#xff1a; 子数组的长度是 k&#xff0c;且 子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件&#xff0…

MT7621_基础篇(2) 芯片资料了解 二

本篇依然为MT7621相关外设的介绍&#xff0c;pin和交换switch。&#xff08;无介绍的模块将在分析章节研究些许细节&#xff09; USB3主机控制器和PHY 手册中没有任何介绍&#xff0c;只有寄存器描述。详情见手册寄存器列表。 网络 PSE: 线速&#xff08;1000 Mbps&#xff0…

Linux - 如何根据名字杀掉一个进程

Linux提供了许多工具来管理系统中的进程。你可以用它们来创建、克隆、甚至销毁进程(create, clone, destroy)。有时你可能需要在Linux中按名称杀死所有进程。在Linux中&#xff0c;有多种方法可以做到这一点。你可以使用pkill、pgrep、pidof和killall中的任何一个函数。在这篇文…

MTK-6235

1&#xff1a;UCS2Strlen mmi_ucs2strlenpfnUnicodeStrlen ---> mmi_ucs2strlen;AnsiiToUnicodeString mmi_asc_to_ucs2UnicodeToAnsii mmi_ucs2_to_ascpfnUnicodeStrncmp mmi_ucs2ncmp; 2&#xff1a; 墙纸 #define CFG_MMI_WA…

HDU6230-Palindrome (马拉车 +BIT )

题意描述 给定一个字符串&#xff0c;统计有多少个子串是one−and−half palindromicone−and−half palindromic. (即字符串长度为3n−23n−2,且满足S[i]S[2n−i]S[2ni−2](1≤i≤n)S[i]S[2n−i]S[2ni−2](1≤i≤n)。 数据范围&#xff1a;字符串长度小于等于500000500000. …