网站后端用什么软件做,广西城乡建设部网站首页,信息网站建设,做网站实训心得体会采集到原始的数据中会存在一些噪点数据#xff0c;噪点数据是对分析无意义或者对分析起到偏执作用的数据。如何清洗#xff1a; 清洗空值/缺失值清洗重复值清洗异常值
import pandas as pd from pandas import DataFrame,Series import numpy as np
pandas处理空值操作
i…采集到原始的数据中会存在一些噪点数据噪点数据是对分析无意义或者对分析起到偏执作用的数据。如何清洗 清洗空值/缺失值清洗重复值清洗异常值
import pandas as pd from pandas import DataFrame,Series import numpy as np
pandas处理空值操作
isnullnotnullanyalldropnafillna
df DataFrame(datanp.random.randint(0,100,size(7,5))) df.iloc[0,3] np.nan df.iloc[3,3] None df.iloc[2,2] np.nan df.iloc[5,3] np.nan df 缺失值的处理方案 1.可以将空值对应的行/列进行删除2.可以将空值进行填充 将空值对应的行进行删除
ret df.isnull() #可以通过isnull判断df中是否存在空数据 ret
#监测ret中哪些行存在True表示df中哪些行存在空值 ex ret.any(axis1) #axis1表示轴向为行 #any可以对ret表格中的行进行是否存在True的判定如果存在True则给该行返回一个True否则返回False ex
#整合后的结果在df中True对应的行是存在空值 ex df.isnull().any(axis1) ex
ex df.notnull().all(axis1) #all判断每一行中是否全部为True如果全部为True则给该行返回True否则返回False ex
df.loc[ex] #一般可以将notall-all返回的结果作为df的行索引过滤空对应的行数据
#更简单的过滤空对应的行数据的方式 df.dropna(axis0) #注意在dropna中的轴向0表示行1表示列
#需求知道df中每一列存在空值的个数/占比 for col in df.columns: #col表示df的某一列的列索引 #判断列中是否存在空值 if df[col].isnull().sum() 0: #计算空值占比 p df[col].isnull().sum() / df[col].size #将p小数转换成百分比显示 p format(p,‘.2%’) #.2%表示将p转换成保留2位小数的百分数 print(col,‘列中存在的空值的占比为’,p)
将空值进行填充
#使用任意值对空值进行填充 df.fillna(value666) #将df中所有的空值填充为666
#使用有意义的数据对空值进行填充近邻值 df.fillna(method‘bfill’,axis0) #在竖直方向上选择空后面的元素填充空值 #method填充方式ffill向前填充和bfill向后填充
#使用有意义的数据对空值进行填充统计值 #使用列的均值填充列的空值 for col in df.columns: if df[col].isnull().sum() 0: mean_value df[col].mean() df[col].fillna(valuemean_value,inplaceTrue) df
注意实现空值的清洗最好选择删除的方式如果删除的成本比较高再选择填充的方式。
处理重复数据
基于duplicated和drop进行删除重复行操作
df DataFrame(datanp.random.randint(0,100,size(8,5))) df.iloc[3] [0,0,0,0,0] df.iloc[5] [0,0,0,0,0] df.iloc[7] [0,0,0,0,0] df
#如何监测数据中是否存在重复的行数据 df.duplicated() #可以监测原始数据中哪些行是重复重复则返回True否则返回False
df.duplicated().sum() #说明df这组数据中有2行重复的行数据 2 df.drop_duplicates(inplaceTrue) #直接删除数据中重复的行数据 df
处理异常/离群数据
异常值是分析师和数据科学家常用的术语因为它需要密切注意否则可能导致错误的估计。简单来说异常值是一个观察值远远超出了样本中的整体模式。
异常值在统计学上的全称是疑似异常值也称作离群点outlier异常值的分析也称作离群点分析。异常值是值样本中出现的’极端值’数据值看起来异常大或异常小其分布明显偏离其余的观测值。异常分析是检验数据中是否存在不合常理的数据在数据分析中既不能忽视异常值的存在也不能简单地把异常值从数据分析中剔除。重视异常值的出现分析其产生的原因常常成为发现新问题进而改进决策的契机。
举个例子做客户分析发现客户的年平均收入是80万美元。但是有两个客户的年收入是4美元和420万美元。这两个客户的年收入明显不同于其他人那这两个观察结果将被视为异常值。
给定条件的异常数据处理 自定义一个1000行3列A,B,C取值范围为0-1的数据源然后将C列中的值大于其两倍标准差的异常值进行清洗
import pandas as pd from pandas import DataFrame import numpy as np
data DataFrame(datanp.random.random(size(1000,3)),columns[‘A’,‘B’,‘C’]) data
#求出了C列数据的2倍标准差 twice_std data[‘C’].std() * 2 twice_std 0.5816897093856236 ex data[‘C’] twice_std data.loc[ex] #取出了异常值对应的行数据
indexs data.loc[ex].index #取出了异常值对应行数据的行索引 indexs
data.drop(indexindexs,inplaceTrue) #在演示数据中将异常值对应的行数据进行清洗 data
标准差法 又称拉依达准则标准差法对某些异常数据进行剔除以提高数据的准确性。适用场景 仅局限于对正态或近似正态分布的样本数据处理且数据量级尽可能大会更加使用。 工作原理 先假设一组检测数据存在异常数据对其进行计算处理得到标准偏差σ然后确定一个区间认为凡超过这个区间的就是异常数据则对该数据予以剔除。标准差本身可以体现因子的离散程度是基于因子的平均值μ而定的。在离群值的处理过程中可通过μ ± nσ来衡量因子与平均值的距离n通常使用3。 将区间[μ - 3σ,μ 3σ]的值视为正常值范围在[μ - 3σ,μ 3σ]外的值视为离群值。
#伪造了一组含有5个异常数据的样本 iris_length abs(np.random.randn(9999)) #手动添加一些异常数据 iris_length[44] 54 iris_length[33] 67 iris_length[22] 56 iris_length[11] 87 iris_length[55] 49 iris_length
def std_opt(data): mean_value data.mean()#均值 std_value data.std() #标准差 m_min mean_value - 3 * std_value m_max mean_value 3 * std_value return m_min,m_max
m_min,m_max std_opt(iris_length)
for i in iris_length: if i m_min or i m_max: print(i) 87.0 56.0 67.0 54.0 49.0
MAD法 又称为绝对值差中位数法是一种先需计算所有因子与中位数之间的距离总和来检测离群值的方法使用大样本数据 公式设有平稳离散数据X[x1,x2,…,xn]其数据中位数为X_median: 应用场景 当数据呈对称分布或接近对称分布时MAD和标准差法效果相等或接近相等当数据为偏态分布应选择众数或中位数等位置代表值这时它们的代表性要比均值好。
def median_opt(data): median np.median(data) count data.size a (((data-median)**2).sum()/count)**0.5 m_min median - 3 * a m_max median 3 * a return m_min,m_max
median_opt(iris_length) (-3.9479897059920868, 5.302663263389095) m_min,m_max median_opt(iris_length) for i in iris_length: if i m_min or i m_max: print(i) 87.0 56.0 67.0 54.0 49.0 源文件可在这里下载 https://download.csdn.net/download/ak2111/89025242?spm1001.2014.3001.5501