Excel按条件筛选、去除数据并绘制直方图:Python

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

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

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

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

 1# -*- coding: utf-8 -*-
 2"""
 3Created on Tue Sep 12 07:55:40 2023
 4
 5@author: 强哥
 6"""
 7
 8import numpy as np
 9import pandas as pd
10import matplotlib.pyplot as plt
11
12original_file_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New/Train_Model_0715_Main_Over_NIR.csv"
13# original_file_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New/TEST.csv"
14result_file_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New/Train_Model_0715_Main_Over_NIR_New.csv"
15
16df = pd.read_csv(original_file_path)
17
18blue_original = df[(df['blue_dif'] >= -0.08) & (df['blue_dif'] <= 0.08)]['blue_dif']
19green_original = df[(df['green_dif'] >= -0.08) & (df['green_dif'] <= 0.08)]['green_dif']
20red_original = df[(df['red_dif'] >= -0.08) & (df['red_dif'] <= 0.08)]['red_dif']
21inf_original = df[(df['inf_dif'] >= -0.1) & (df['inf_dif'] <= 0.1)]['inf_dif']
22
23mask = ((df['days'] >= 0) & (df['days'] <= 45)) | ((df['days'] >= 320) & (df['days'] <= 365))
24range_min = -0.03
25range_max = 0.03
26
27df.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]))
28df.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]))
29df.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]))
30df.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]))
31df = df.dropna()
32
33blue_new = df[(df['blue_dif'] >= -0.08) & (df['blue_dif'] <= 0.08)]['blue_dif']
34green_new = df[(df['green_dif'] >= -0.08) & (df['green_dif'] <= 0.08)]['green_dif']
35red_new = df[(df['red_dif'] >= -0.08) & (df['red_dif'] <= 0.08)]['red_dif']
36inf_new = df[(df['inf_dif'] >= -0.1) & (df['inf_dif'] <= 0.1)]['inf_dif']
37
38plt.figure(0)
39plt.hist(blue_original, bins = 50)
40plt.figure(1)
41plt.hist(green_original, bins = 50)
42plt.figure(2)
43plt.hist(red_original, bins = 50)
44plt.figure(3)
45plt.hist(inf_original, bins = 50)
46
47plt.figure(4)
48plt.hist(blue_new, bins = 50)
49plt.figure(5)
50plt.hist(green_new, bins = 50)
51plt.figure(6)
52plt.hist(red_new, bins = 50)
53plt.figure(7)
54plt.hist(inf_new, bins = 50)
55
56df.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学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值