本文介绍基于Python语言,读取Excel表格文件数据,以其中某一列数据的值为标准,对于这一列数据处于指定范围所有行,再用其他几列数据的数值,加以数据筛选与剔除;同时,对筛选前、后的数据分别绘制若干直方图,并将结果数据导出保存为一个新的Excel表格文件的方法。

  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件,在本文中我们就以.csv格式的文件为例;其中,如下图所示,这一文件中有一列(在本文中也就是days这一列)数据,我们将其作为基准数据,希望首先取出days数值处于045320365范围内的所有样本(一行就是一个样本),进行后续的操作。

  其次,对于取出的样本,再依据其他4列(在本文中也就是blue_difgreen_difred_difinf_dif4列)数据,将这4列数据不在指定数值区域内的行删除。在这一过程中,我们还希望绘制在数据删除前、后,这4列(也就是blue_difgreen_difred_difinf_dif4列)数据各自的直方图,一共是8张图。最后,我们还希望将删除上述数据后的数据保存为一个新的Excel表格文件。

  知道了需求,我们就可以撰写代码。本文所用的代码如下所示。

# -*- coding: utf-8 -*-
"""
Created on Tue Sep 12 07:55:40 2023 @author: fkxxgis
""" import numpy as np
import pandas as pd
import matplotlib.pyplot as plt original_file_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New/Train_Model_0715_Main_Over_NIR.csv"
# original_file_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New/TEST.csv"
result_file_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New/Train_Model_0715_Main_Over_NIR_New.csv" df = pd.read_csv(original_file_path) blue_original = df[(df['blue_dif'] >= -0.08) & (df['blue_dif'] <= 0.08)]['blue_dif']
green_original = df[(df['green_dif'] >= -0.08) & (df['green_dif'] <= 0.08)]['green_dif']
red_original = df[(df['red_dif'] >= -0.08) & (df['red_dif'] <= 0.08)]['red_dif']
inf_original = df[(df['inf_dif'] >= -0.1) & (df['inf_dif'] <= 0.1)]['inf_dif'] mask = ((df['days'] >= 0) & (df['days'] <= 45)) | ((df['days'] >= 320) & (df['days'] <= 365))
range_min = -0.03
range_max = 0.03 df.loc[mask, 'blue_dif'] = df.loc[mask, 'blue_dif'].apply(lambda x: x if range_min <= x <= range_max else np.random.choice([np.nan, x]))
df.loc[mask, 'green_dif'] = df.loc[mask, 'green_dif'].apply(lambda x: x if range_min <= x <= range_max else np.random.choice([np.nan, x]))
df.loc[mask, 'red_dif'] = df.loc[mask, 'red_dif'].apply(lambda x: x if range_min <= x <= range_max else np.random.choice([np.nan, x]))
df.loc[mask, 'inf_dif'] = df.loc[mask, 'inf_dif'].apply(lambda x: x if range_min <= x <= range_max else np.random.choice([np.nan, x], p =[0.9, 0.1]))
df = df.dropna() blue_new = df[(df['blue_dif'] >= -0.08) & (df['blue_dif'] <= 0.08)]['blue_dif']
green_new = df[(df['green_dif'] >= -0.08) & (df['green_dif'] <= 0.08)]['green_dif']
red_new = df[(df['red_dif'] >= -0.08) & (df['red_dif'] <= 0.08)]['red_dif']
inf_new = df[(df['inf_dif'] >= -0.1) & (df['inf_dif'] <= 0.1)]['inf_dif'] plt.figure(0)
plt.hist(blue_original, bins = 50)
plt.figure(1)
plt.hist(green_original, bins = 50)
plt.figure(2)
plt.hist(red_original, bins = 50)
plt.figure(3)
plt.hist(inf_original, bins = 50) plt.figure(4)
plt.hist(blue_new, bins = 50)
plt.figure(5)
plt.hist(green_new, bins = 50)
plt.figure(6)
plt.hist(red_new, bins = 50)
plt.figure(7)
plt.hist(inf_new, bins = 50) df.to_csv(result_file_path, index=False)

  首先,我们通过pd.read_csv函数从指定路径的.csv文件中读取数据,并将其存储在名为dfDataFrame中。

  接下来,通过一系列条件筛选操作,从原始数据中选择满足特定条件的子集。具体来说,我们筛选出了在blue_difgreen_difred_difinf_dif4列中数值在一定范围内的数据,并将这些数据存储在名为blue_originalgreen_originalred_originalinf_original的新Series中,这些数据为我们后期绘制直方图做好了准备。

  其次,创建一个名为mask的布尔掩码,该掩码用于筛选满足条件的数据。在这里,它筛选出了days列的值在045之间或在320365之间的数据。

  随后,我们使用apply函数和lambda表达式,对于days列的值在045之间或在320365之间的行,如果其blue_difgreen_difred_difinf_dif4列的数据不在指定范围内,那么就将这列的数据随机设置为NaNp =[0.9, 0.1]则是指定了随机替换为NaN的概率。这里需要注意,如果我们不给出p =[0.9, 0.1]这样的概率分布,那么程序将依据均匀分布的原则随机选取数据。

  最后,我们使用dropna函数,删除包含NaN值的行,从而得到筛选处理后的数据。其次,我们依然根据这四列的筛选条件,计算出处理后的数据的子集,存储在blue_newgreen_newred_newinf_new中。紧接着,使用Matplotlib创建直方图来可视化原始数据和处理后数据的分布;这些直方图被分别存储在8个不同的图形中。

  代码的最后,将处理后的数据保存为新的.csv文件,该文件路径由result_file_path指定。

  运行上述代码,我们将得到8张直方图,如下图所示。且在指定的文件夹中看到结果文件。

  至此,大功告成。

Python按条件筛选、剔除表格数据并绘制剔除前后的直方图的更多相关文章

  1. C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值)

    原文:C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值) 1.问题的提出: 电池生产中,遇到一批电池的测量结果数据: 电压值 电池个数 电压值 电池个数 电压值 电池个数 电 ...

  2. aspnet中通过多条件筛选来显示数据的实现

    UI图: 功能实现: 1.勾选住哪个选项之后,就加入了筛选.支持姓名的模糊查询. 2.对筛选出来的数据可以直接修改,并更新回数据库. 说明:显示的数据来自T_User表.数据显示控件使用的是 List ...

  3. Python使用Tabula提取PDF表格数据

    今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样: python读取PDF无非就是三种方式(我所了解的),pdfminer.pdf2htmlEX 和 Tabula.综合考虑后,选择了 ...

  4. Python利用xlutils统计excel表格数据

    假设有像上这样一个表格,里面装满了各式各样的数据,现在要利用模板对它进行统计每个销售商的一些数据的总和.模板如下: 代码开始: 1 #!usr/bin/python3 2 # -*-coding=ut ...

  5. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

  6. python基础一 -------如何在列表字典集合中根据条件筛选数据

    如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) fi ...

  7. python数据结构-如何在列表、字典、集合中根据条件筛选数据

    如何在列表.字典.集合中根据条件筛选数据 问题举例: 过滤列表[1, 2, 5, -1, 9, 10]中的负数 筛选字典{“zhangsan”:97, "lisi":80, &qu ...

  8. Bootstrap:Bootstrap_table第一篇:快速用bootstrap_table(支持参数)筛选并展示数据,固定表格前几列,实现表格单元格编辑

    1.准备好css和js文件 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstr ...

  9. 关于excel表格中只复制筛选后的数据

    今天笔者在整个一个表格中的数据,需要将原表格的数据根据一些条件筛选后,整理到新的excel表中 但是发现每次操作,都将筛选条件之外的数据也粘贴进去了,但笔者确实又只选中了部分数据 经过多种方式尝试后, ...

  10. 干货--Excel的表格数据的一般处理和常用python模块。

    写在前面: 本文章的主要目的在于: 介绍了python常用的Excel处理模块:xlwt,xlrd,xllutils,openpyxl,pywin32的使用和应用场景. 本文只针对于Excel表中常用 ...

随机推荐

  1. git 安装 和 git 客户端的使用

    git clone 命令 # 查前当前登录用户的一些基本信息: # 查看当前登录的账号:git config user.name # 修改当前登录的账号为xcj:git config --global ...

  2. dotnet c# samples core nativeaot NativeLibrary

    如何在 System.Text.Json 中使用源生成 https://learn.microsoft.com/zh-cn/dotnet/standard/serialization/system-t ...

  3. Java并发编程(一)JUC同步类

    JUC 是学习 Java 并发编程的小伙伴不可避免的一个 pkg,JUC提供了对并发编程的底层支持,比如我们熟悉的线程池.MQ.线程同步... 都有JUC的影子,下面我们一起来看看JUC下比较重要的几 ...

  4. Jenkins自动化集成

    gitlab连接Jenkins 创建token后 , 现在的网页上就会出现一个token: token只出现一次,注意保存 将这个token在Jenkins上配置,现在开始配置Jenkins Jenk ...

  5. itestwork(爱测试)开源一站式接口测试&敏捷测试工作站 9.0.0 GA 发布,重大升级

    (一)itest 简介 itest work (爱测试)  一站式工作站让测试变得简单.敏捷.itest work 包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1 ...

  6. kettle从入门到精通 第五十八课 ETL之kettle HTTP post使用教程

    1.今天群里有位朋友问我有没有关于调用http接口的kettle 示例,我下意识的去翻我的公众号推文,愣是没找到.果断开始撸. 2.本次演示流程通过调用接口[网易云音乐随机歌曲],然后解析返回的数据, ...

  7. 增补博客 第八篇 python 中国大学排名数据分析与可视化

    [题目描述]以软科中国最好大学排名为分析对象,基于requests库和bs4库编写爬虫程序,对2015年至2019年间的中国大学排名数据进行爬取:(1)按照排名先后顺序输出不同年份的前10位大学信息, ...

  8. CSS 属性计算

    CSS 属性计算过程 你是否了解 CSS 的属性计算过程呢? 有的同学可能会讲,CSS属性我倒是知道,例如: p{ color : red; } 上面的 CSS 代码中,p 是元素选择器,color ...

  9. 【原创】EtherCAT主站IgH解析(二)-- Linux/Windows/RTOS等多操作系统IgH EtherCAT主站移植指南

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 前言 目前,EtherCAT商用主站有:Aconti ...

  10. 集成学习与随机森林(二)Bagging与Pasting

    Bagging 与Pasting 我们之前提到过,其中一个获取一组不同分类器的方法是使用完全不同的训练算法.另一个方法是为每个预测器使用同样的训练算法,但是在训练集的不同的随机子集上进行训练.在数据抽 ...