怎么做织梦网站,网页设计结课报告,网站根目录是哪个文件夹,徐州建设网站价格本文介绍基于Python#xff0c;读取Excel数据#xff0c;以一列数据的值为标准#xff0c;对这一列数据处于指定范围的所有行#xff0c;再用其他几列数据数值#xff0c;加以筛选与剔除#xff1b;同时#xff0c;对筛选与剔除前、后的数据分别绘制若干直方图#xff… 本文介绍基于Python读取Excel数据以一列数据的值为标准对这一列数据处于指定范围的所有行再用其他几列数据数值加以筛选与剔除同时对筛选与剔除前、后的数据分别绘制若干直方图并将结果数据导出保存为一个新的Excel表格文件的方法。 首先我们来明确一下本文的具体需求。现有一个Excel表格文件在本文中我们就以.csv格式的文件为例其中如下图所示这一文件中有一列在本文中也就是days这一列数据我们将其作为基准数据希望首先取出days数值处于0至45、320至365范围内的所有样本一行就是一个样本进行后续的操作。 其次对于取出的样本再依据其他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 2023author: fkxxgis
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltoriginal_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.csvdf 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.03df.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, indexFalse)首先我们通过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列的数据不在指定范围内那么就将这列的数据随机设置为NaNp [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张直方图如下图所示。且在指定的文件夹中看到结果文件。 至此大功告成。
欢迎关注疯狂学习GIS