码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python按条件筛选、剔除表格数据并绘制剔除前后的直方图


    本文介绍基于Python语言,读取Excel表格文件数据,以其中某一列数据的值为标准,对于这一列数据处于指定范围的所有行,再用其他几列数据的数值,加以数据筛选与剔除;同时,对筛选前、后的数据分别绘制若干直方图,并将结果数据导出保存为一个新的Excel表格文件的方法~
    合集 - 学术工作效率(66)
    1.安装Amos结构方程模型分析软件的方法2023-04-282.如何不显示我的电脑、回收站等图标?2023-05-053.SPSS计算极值、平均值、中位数、方差、偏度、峰度、变异系数2023-05-084.无需代码绘制人工神经网络ANN模型结构图的方法2023-05-105.论文的技术路线流程图如何绘制?2023-05-196.电脑缩放异常、显示亮度无法调整的处理办法2023-06-067.EndNote参考文献格式Output Styles界面介绍2023-06-088.Windows电脑环境变量(用户变量、系统变量)的修改2023-07-139.如何修改电脑的BIOS密码?2023-07-2210.叶绿素含量测定仪SPAD-502怎么使用?2023-07-2911.全球都有哪些高光谱遥感卫星?2023-08-1912.创建Anaconda虚拟Python环境的方法2023-09-0913.Anaconda虚拟环境配置Python库与Spyder编译器2023-10-1414.小提琴图的绘制方法:Python matplotlib实现2023-10-1615.如何用CAN-EYE获取植被参数数据?2023-10-2216.ArcMap属性表出现乱码情况的解决2023-10-2717.考研保研、夏令营推免的简历模板2023-12-1518.安装MicroStation软件、Terrasolid插件的方法01-2219.VMware虚拟机部署Linux Ubuntu系统的方法01-2420.在Linux Ubuntu系统中部署C++环境与Visual Studio Code软件01-2621.安装Visual Studio的详细流程01-2822.获取Visual Studio所用MSVC编译器版本:_MSC_VER数值01-2923.Visual Studio部署C++矩阵库Armadillo的方法01-3024.如何在Visual Studio新C++项目中调用之前配置过的库?01-3125.在Visual Studio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)02-0126.C++遴选出特定类型的文件或文件名符合要求的文件02-0227.初步上手Git软件及GitHub平台:基本操作方法02-0528.下载、安装Git并拷贝GitHub项目到本地的流程02-0629.Visual Studio部署matplotlib绘图库的C++版本02-0730.Anaconda与Python环境在Windows中的部署03-0131.Windows配置R语言、RStudio开发环境03-0332.Visual Studio部署C++环境下OpenCV库03-0633.ArcMap的mxd文件没有数据、显示感叹号怎么办?03-2234.绘制三元图、颜色空间图:R语言代码03-2735.Linux电脑如何下载QGIS?03-2936.Python表格处理模块xlrd在Anaconda中的安装04-0137.Postman模拟浏览器网页请求并获取网页数据04-0338.多次复制Excel符合要求的数据行:Python批量实现04-0839.电脑开机时报错No Bootable Device找不到索引的解决方法04-1240.论文研究区域图的制作方法:ArcGIS04-1741.修改中文、英文参考文献在文末列表中的顺序:EndNote04-1942.ArcPy自动绘制大量地图并设置地图要素:Python04-2243.Python提取文本文件(.txt)数据的方法05-2444.将大量文件的拓展名中大写字母改为小写:Python实现05-2545.浏览器打开JupyterLab后所有快捷键与窗口按键均失效怎么办?05-2746.将编译过的C++库迅速部署在Visual Studio新项目中05-2847.EndNote里参考文献的期刊名显示错误怎么办?05-2948.找出长时序遥感影像的缺失日期并用像素均为0的栅格填充缺失日期的文件05-3149.Python依据遥感影像的分幅筛选出对应的栅格文件06-0150.Python结合文件名称将多个文件复制到不同路径下06-0551.mklink命令使得OneDrive同步任意一个文件夹06-1652.在Ubuntu系统安装Anaconda及Python06-1853.GIS数据获取:土地利用与土壤属性、DEM、水体水系数据06-2554.配置h5py、netCDF4库的方法:Anaconda环境06-2655.核对不同文件夹所含内容的差异并提取缺失内容:Python代码07-0356.坚果云与floccus实现Chrome书签国内跨设备、跨平台同步07-0657.基于FileZilla上传、下载服务器数据的方法07-09
    58.Python按条件筛选、剔除表格数据并绘制剔除前后的直方图07-20
    59.R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图07-2260.Linux服务器PBS任务队列作业提交脚本的使用方法07-2661.Python按条件删除Excel表格数据的方法08-0962.PowerShell快速修改多个文件的名称08-1463.用whl文件安装Anaconda中的GDAL08-1764.ArcGIS创建渔网工具的使用方法08-2665.Python自动复制Excel数据:将各行分别重复指定次数09-0166.Python批量分割Excel后逐行做差、合并文件的方法09-03
    收起

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

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

    image

      其次,对于取出的样本,再依据其他4列(在本文中也就是blue_dif、green_dif、red_dif与inf_dif这4列)数据,将这4列数据不在指定数值区域内的行删除。在这一过程中,我们还希望绘制在数据删除前、后,这4列(也就是blue_dif、green_dif、red_dif与inf_dif这4列)数据各自的直方图,一共是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文件中读取数据,并将其存储在名为df的DataFrame中。

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

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

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

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

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

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

      至此,大功告成。

  • 相关阅读:
    回溯算法!
    Python面向对象编程
    css横向滚动条支持鼠标滚轮
    Vue+element 首页业务实现
    Spring 中毒太深!离开 Spring 我居然连最基本的接口都不会写了。。。
    一条SQL引起的系统不可用
    Linux初级知识大全(一)
    css设置输入框边框无效或者不展示边框
    @Async注解详解+实例
    飞书小技巧:markdown导出
  • 原文地址:https://www.cnblogs.com/fkxxgis/p/18312992
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号