-
2020-12-04 10:23:20
缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。
python缺失的处理一般情况下有三种方法:
(1)删掉缺失值数据
删除法是对缺失值进行处理的最原始方法。它将存在缺失值的个案删除。如果数据缺失问题可以通过简单的删除小部分样本来达到目标,那么这个方法是最有效的。
(2)不对其进行处理
在实际应用中,一些模型无法应对具有缺失值的数据,因此要对缺失值进行处理。然而还有一些模型本身就可以应对具有缺失值的数据,此时无需对数据进行处理,比如Xgboost,rfr等高级模型。
(3)利用插补法对数据进行补充
A.均值插补
属于单值插补。数据的属性分为定距型和非定距型。如果缺失值是定距型的,就以该属性存在值的平均值来插补缺失的值;如果缺失值是非定距型的,就用该属性的众数来补齐缺失的值。
B.利用同类均值插补
属于单值插补。用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。
C.热卡填补
热卡填充法是在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。通常会找到超出一个的相似对象,在所有匹配对象中没有最好的,而是从中随机的挑选一个作为填充值。这个问题关键是不同的问题可能会选用不同的标准来对相似进行判定,以及如何制定这个判定标准。该方法概念上很简单,且利用了数据间的关系来进行空值估计,但缺点在于难以定义相似标准,主观因素较多。
D.多重插补
多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。
E.极大似然估计(Max Likelihood ,ML)
在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。
F.建模预测
将缺失的属性作为预测目标来预测,将数据集按照是否含有特定属性的缺失值分为两类,利用现有的机器学习算法对待预测数据集的缺失值进行预测。
该方法的根本的缺陷是如果其他属性和缺失属性无关,则预测的结果毫无意义;但是若预测结果相当准确,则说明这个缺失属性是没必要纳入数据集中的;一般的情况是介于两者之间。
以上就是小编整理的python缺失值处理的几种常用方法,希望对大家有所帮助。
完 谢谢观看
更多相关内容 -
python 缺失值处理的方法(Imputation)
2020-09-19 04:21:33主要介绍了python 缺失值处理的方法(Imputation),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
python缺失值处理
2022-02-12 11:05:12在数据分析和数据挖掘处理中...缺失值处理的方式有三种:过滤法、填充法、插值法。 过滤法:指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测,也就是行;或当某些变量的缺失比例非常高时(如85%以上)...在数据分析和数据挖掘处理中常常会发现数据中存在缺失值,因此需要对此进行处理。
工具:Pandas
数据如下:
调用 对象.isnull()函数可以对数据进行缺失值检测,结果如下:
可以看到,缺失值的地方为True。
缺失值处理的方式有三种:过滤法、填充法、插值法。
- 过滤法:指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测,也就是行;或当某些变量的缺失比例非常高时(如85%以上),直接删除这些缺失的变量,也就是列。
调用 对象.dropna(axis=0,how='any',thresh=None):axis=0表示删除行,axis=1表示删除列;how可选any或all,any表示删除带有NaN的行,all表示删除整行数据全为NaN的行;thresh为整数类型,表示删除的条件,如thresh=3表示一行中至少有3个非NaN值时,才将其保留。
- 填充法:指用其他数值填充缺失值。
调用 对象.fillna(value=None,method=None,axis=None,inplace=False): value表示用常数填充,比如value=5就是用5填充NaN,也可以用字典进行填充,当然也可以用均值、中位数等进行填充;method可以选择填充方式,pad/ffill表示用前一行非缺失值填充该缺失值,backfill/bfill表示用后一行非缺失值填充该缺失值;inplace=True表示直接修改原对象,inplace=False表示创建一个副本并修改,可以用于赋值,原数据不发生改变。
- 插值法:可以用KNN、拉格朗日等方法补值。
-
python缺失值处理的方法
2021-11-14 19:52:15其他数据文件由于缺失值比较少甚至没有缺失值,我就人为的制造缺失值,建议用代码实现这一过程。 目录 1、删除元组 (1)删除存在缺失值的个案 (2)删除含特殊值的特征 2、不处理 3、缺失值插补 (1)人工补...咋说呢,这本来是我们统计老师给的一个小期中作业,方法并不详尽,我找了几个简单的,看个乐就行。泰坦尼克号数据集的使用是因为之前做过它的一系列分析,所以图个方便。其他数据文件由于缺失值比较少甚至没有缺失值,我就人为的制造缺失值,建议用代码实现这一过程。
目录
1、删除元组
(1)删除存在缺失值的个案
举例:通过观察泰坦尼克数据集可以发现,数据的年龄Age这一变量存在部分缺失,可以尝试删除变量Age缺失的纪录
图为泰坦尼克数据集
import pandas as pd import numpy as np #读入数据 data=pd.read_csv('C:/Users/24580/Desktop/数据挖掘/train.csv') data.head(30) data1_1=data.dropna(subset=['Age']) data1_1.head(20)
(2)删除含特殊值的特征
举例:通过观察泰坦尼克数据集可以发现,数据的Cabin这一变量大部分数据都未知,可以尝试将Cabin这一特征变量给删除
#(基于1.1的数据) data1_2=data.drop(columns=['Cabin']) data1_2.head(20)
2、不处理
不处理,就直接进行下一步,贼佛系的做法,但总有一定依据
3、缺失值插补
有多种方式补齐数据,以下只简单罗列了5种方法
(1)人工补齐数据,适用于规模小,缺失少的数据
举例:在成绩表student中,由于小张的语文试卷不慎丢失,老师按照他上课的表现进行打分
import pandas as pd import numpy as np #读入数据 data=pd.read_excel('C:/Users/24580/Desktop/社会网络/student.xlsx') data=data.fillna(95) data
(2)用平均数补齐数据
举例:通过观察泰坦尼克数据集可以发现,数据的Age这一变量存在部分缺失,用平均数来插补缺失的Age值
#(基于1.1的数据) #填充age(平均数) data['Age']=data['Age'].fillna(data['Age'].median()) data3_2=data data3_2.head(10)
(3)用众数补齐数据
举例:通过观察泰坦尼克数据集可以发现,数据的Embarked这一变量存在部分缺失,用众数来插补缺失的Embarked值
#(基于1.1的数据) #填充embarked cishu=data['Embarked'].value_counts()#计数 index_max=cishu.idxmax() print(index_max) data['Embarked']=data['Embarked'].fillna(index_max) data3_3=data data3_3.head(10)
(4)回归建模填充数据
举例:在Salary_Data.csv数据文件中包含两个变量,一个是工作年龄YearsExperience,一个是薪资水平Salary,其中Salary有部分数据缺失,鉴于YearsExperience与Salary有强烈的线性相关关系,故拟采用线性回归的方法进行数据填充
import pandas as pd import numpy as np import seaborn as sns import statsmodels.api as sm import matplotlib.pyplot as plt #读入数据 data=pd.read_csv('C:/Users/24580/Desktop/社会网络/Salary_Data.csv') data.head(10) print(data.isna().sum()) #画散点图 sns.lmplot(x='YearsExperience',y='Salary',data=data,ci=None) plt.show() #有缺失的记录,建立需预测的子集 data_pred=data[np.isnan(data['Salary'])] X_pred=pd.DataFrame(data_pred) y_pred=data_pred['Salary'] #无缺失值的记录,即训练子集 data_train=data.dropna(subset=['Salary'],axis=0) #建模 fit=sm.formula.ols('Salary~YearsExperience',data=data_train).fit() print(fit.params) #预测 y_pred=fit.predict(X_pred) print(y_pred) data_pred['Salary']=y_pred print(data_pred) #数据合并 data=data_train.append(data_pred) data.head(10)
共5个缺失值
散点图表示两者存在明显线性关系
回归方程系数
为预测的缺失部分的估计值,将数据合并即可
(5)K最近邻算法,最近k个样本的均值进行数据填补
举例:CCPP数据集中,前四个变量是自变量,最后一列为连续的因变量PE,表示高炉的发电量,其中PE列存在数据缺失,拟通过KNN模型进行预测填补
其中最佳的临近个数设置为7,是通过10重交叉验证所选取的最佳K值
(本代码段未包含交叉验证的代码)
import pandas as pd import numpy as np from sklearn import neighbors from sklearn.preprocessing import minmax_scale #读入数据 data=pd.read_excel('C:/Users/24580/Desktop/社会网络/CCPP.xlsx') data.head(10) predictors=data.columns[:-1]#自变量名称 X=minmax_scale(data[predictors])#标准化 print(data.isna().sum()) #缺失值个数 #有缺失的记录,建立需预测的子集 data_pred=data[np.isnan(data['PE'])] x_test=pd.DataFrame(data_pred[predictors]) y_test=data_pred['PE'] #无缺失值的记录,即训练子集 data_train=data.dropna(subset=['PE'],axis=0) y_train=data_train['PE'] x_train=data_train[predictors] #建模 knn=neighbors.KNeighborsRegressor(n_neighbors=7,weights='distance') knn.fit(x_train,y_train) #预测 pred=knn.predict(x_test) print(pred) data_pred['PE']=pred print(data_pred) #数据合并 data=data_train.append(data_pred) data.head(10)
原数据
共15个缺失
预测的15个缺失值,将数据合并即可
总结一下:
其他方法:
1、针对时间序列可以通过建模进行预测,然后填补数据
2、多重插补
3、热卡填充……
还有很多方法可以使用,按我的拙见是:只要能进行预测的模型,按理都可以预测缺失值,只是模型的准确率会有所不同
方法总结:
大致梳理一下回归和KNN进行预测的步骤,其他有的模型也可参照这样:
1、观察数据,选择所需模型或方法
2、将有缺失的数据记录从原数据集中提取出来,形成测试集test
(如果需要将自变量、因变量数据拆分,则拆分为x_test,y_test)
剩余部分形成训练集train
(同理,训练集可能也需要拆分)
3、对训练集train进行建模
4、对测试集test进行模型的预测,得到估计值
5、将估计值与原数据合并
(总感觉自己说的废话,hhh,看看就行)
-
python数据预处理(1)———缺失值处理
2020-12-21 21:28:33首先是缺失值处理。 #读取数据 import pandas as pd filepath= 'F:/...'#本地文件目录 df= pd.read_csv(train,sep=',')#df数据格式为DataFrame 查看缺失值 查看每一特征是否缺失及缺失值数量可能影响着处理缺失值的... -
超详细,Python 处理缺失值的这 8 种方法真的很棒
2021-11-16 22:37:22忽略缺失值也是不合理的,因此我们需要找到有效且适当地处理它们的方法。 在本文中,我们将介绍 8 种不同的方法来解决缺失值问题,哪种方法最适合特定情况取决于数据和任务。欢迎收藏学习,喜欢点赞支持,技术交流...缺失值可能是数据科学中最不受欢迎的值,然而,它们总是在身边。忽略缺失值也是不合理的,因此我们需要找到有效且适当地处理它们的方法。
在本文中,我们将介绍 8 种不同的方法来解决缺失值问题,哪种方法最适合特定情况取决于数据和任务。欢迎收藏学习,喜欢点赞支持,技术交流可以文末加群,尽情畅聊。
让我们首先创建一个示例数据框并向其中添加一些缺失值。
我们有一个 10 行 6 列的数据框。下一步是添加缺失值。 我们将使用 loc 方法选择行和列组合,并使它们等于“np.nan”,这是标准缺失值表示之一。
这是数据框现在的样子:
item 和 measure 1 列具有整数值,但由于缺少值,它们已被向上转换为浮点数。在 Pandas 1.0 中,引入了整数类型缺失值表示 (),因此我们也可以在整数列中包含缺失值。 但是,我们需要显式声明数据类型。
尽管有缺失值,我们现在可以保留整数列。现在我们有一个包含一些缺失值的数据框。 是时候看看处理它们的不同方法了。
1. 删除有缺失值的行或列
一种选择是删除包含缺失值的行或列。
使用默认参数值,dropna 函数会删除包含任何缺失值的行。数据框中只有一行没有任何缺失值。同时我们还可以选择使用轴参数删除至少有一个缺失值的列。
2. 删除只有缺失值的行或列
另一种情况是有一列或一行充满缺失值。 这样的列或行是无用的,所以我们可以删除它们。
dropna 函数也可以用于此目的。 我们只需要改变 how 参数的值。
3. 根据阈值删除行或列
基于“any”或“all”的删除并不总是最好的选择。 我们有时需要删除具有“大量”或“一些”缺失值的行或列。
我们不能将这样的表达式分配给 how 参数,但 Pandas 为我们提供了一种更准确的方法,即 thresh 参数。
例如,“thresh=4”意味着至少有 4 个非缺失值的行将被保留。 其他的将被丢弃。
我们的数据框有 6 列,因此将删除具有 3 个或更多缺失值的行。
只有第三行有 2 个以上的缺失值,所以它是唯一一个被丢弃的。4. 基于特定的列子集删除
在删除列时,我们可以只考虑部分列。
dropna 函数的子集参数用于此任务。 例如,我们可以删除在度量 1 或度量 2 列中有缺失值的行,如下所示:
到目前为止,我们已经看到了根据缺失值删除行或列的不同方法。放弃并不是唯一的选择。 在某些情况下,我们可能会选择填充缺失值而不是删除它们。
事实上,填充可能是更好的选择,因为数据意味着价值。 如何填补缺失值,当然取决于数据的结构和任务。
fillna 函数用于填充缺失值。
5. 填充一个常数值
我们可以选择一个常量值来替代缺失值。如果我们只给 fillna 函数一个常量值,它将用该值替换数据框中的所有缺失值。
更合理的方法是为不同的列确定单独的常量值。 我们可以将它们写入字典并将其传递给 values 参数。
item 列中的缺失值替换为 1014,而 measure 1 列中的缺失值替换为 0。6. 填充聚合值
另一种选择是使用聚合值,例如平均值、中位数或众数。
下面这行代码用该列的平均值替换了第 2 列中的缺失值。
7. 替换为上一个或下一个值
可以用该列中的前一个或下一个值替换该列中的缺失值。在处理时间序列数据时,此方法可能会派上用场。 假设您有一个包含每日温度测量值的数据框,但缺少一天的温带。 最佳解决方案是使用第二天或前一天的温度。
fillna 函数的方法参数用于执行此任务。
“bfill”向后填充缺失值,以便将它们替换为下一个值。看看最后一栏。 缺失值被替换到第一行。 这可能不适合某些情况。
值得庆幸的是,我们可以限制用这种方法替换的缺失值的数量。 如果我们将 limit 参数设置为 1,那么一个缺失值只能用它的下一个值替换。 后面的第二个或第三个值将不会用于替换。
8. 使用另一个数据框填充
我们还可以将另一个数据帧传递给 fillna 函数。 新数据框中的值将用于替换当前数据框中的缺失值。
将根据行索引和列名称选择值。 例如,如果 item 列的第二行中存在缺失值,则将使用新数据框中相同位置的值。
以上是具有相同列的两个数据框。 第一个 没有任何缺失值。我们可以使用 fillna 函数如下:
df 中的值将替换为 df2 中关于列名和行索引的值。总结
缺失将永远存在于我们的生活中。 没有最好的方法来处理它们,但我们可以通过应用准确合理的方法来降低它们的影响。我们已经介绍了 8 种不同的处理缺失值的方法,使用哪一个取决于数据和任务。
技术交流
欢迎转载、收藏、有所收获点赞支持一下!
目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
- 方式①、发送如下图片至微信,长按识别,后台回复:加群;
- 方式②、添加微信号:dkl88191,备注:来自CSDN
- 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
-
Python时间序列缺失值的处理方法(日期缺失填充)
2020-12-25 20:42:18因近期进行时间序列分析时遇到了数据预处理中的缺失值处理问题,其中日期缺失和填充在网上没有找到较好较全资料,耗费了我一晚上工作时间,所以下面我对这次时间序列缺失值处理学习做了以下小结以供之后同行们参考... -
python缺失值处理案例分析:泰坦尼克数据
2020-12-15 14:15:00缺失值处理真实数据往往某些变量会有缺失值。首先,我们用 info( ) 语句操作,看到整份数据的大概情况:从这份数据我们可以发现,这里一共有 891 行数据,所以在中间那一列数据中看到的不是 891 个数据的,都是有... -
Python Pandas对缺失值的处理方法
2020-09-18 15:13:46主要给大家介绍了关于Python Pandas对缺失值的处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python Pandas具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 -
缺失值处理python实现
2019-02-22 14:10:29缺失值的处理 由于各种原因,我们使用的数据集或多或少地存在着缺失值。如果直接删除缺失值,会丢失其他有价值的数据,以下是处理缺失值的几种方法...但是如果缺失值占比上升,这种缺失值处理方法误差就很大了。 &a -
Python Pandas缺失值处理
2022-04-19 12:35:08Python Pandas缺失值处理 在一些数据分析业务中,数据缺失是我们经常遇见的问题,缺失值会导致数据质量的下降,从而影响模型预测的准确性,这对于机器学习和数据挖掘影响尤为严重。因此妥善的处理缺失值能够使模型... -
python实现数据清洗(缺失值与异常值处理)
2020-09-18 08:43:03今天小编就为大家分享一篇python实现数据清洗(缺失值与异常值处理),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
15 python数据缺失值处理方法代码示例
2018-12-13 19:40:462 缺失值处理方法 数据补齐 删除缺失行 不处理 3 代码示例 import pandas data=pandas.read_csv('D:\\DATA\\pycase\\number2\\6.1\\data3.csv') # 均值'mean' 中值'median' most_freque... -
【超详细】手把手教你用 Python 缺失数据处理(附代码)
2022-03-01 21:28:42大家好,今天给大家分享一篇pandas数据处理的文章。喜欢本文记得收藏、关注、点赞。 推荐文章 有人把吴恩达老师的机器学习和深度学习做成了中文版 ...缺失值有3种表示方法,np.nan,none,pd.NA。 -
Python处理缺失值
2017-07-13 14:46:16首先创建具有缺失值NaN(Not A Number)的CSV(comma-separated values)文件:import pandas as pd from io import StringIO csv_data = '''A,B,C,D 1.0,2.0,3.0,4.0 5.0,6.0,,8.0 0.0,11.0,12.0,''' # If you are ... -
Python数据分析基础: 数据缺失值处理
2020-10-31 21:56:01作者:东哥起飞 公众号:Python数据科学 圣人曾说过:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。 再好的模型,如果没有好...本篇我们来说说面对数据的缺失值,我们该如何处理。文末有. -
缺失值处理
2019-09-13 15:58:26入门级基础知识,本人学习整理笔记,对小白很友好,有兴趣的学习的朋友可以查阅。 -
python 检查数据中是否有缺失值,删除缺失值的方式
2021-01-02 23:00:06# 检查数据中是否有缺失值 np.isnan(train).any() Flase:表示对应特征的特征值中无缺失值 True:表示有缺失值 通常情况下删除行,使用... 您可能感兴趣的文章:python实现数据清洗(缺失值与异常值处理)Python Pandas对 -
五、python 缺失值处理(Imputation)
2018-06-08 19:48:59一、缺失值的处理方法 由于各种各样的原因,真实世界中的许多数据集都包含缺失数据,这些数据经常被编码成空格、nans或者是其他的占位符。但是这样的数据集并不能被scikit - learn算法兼容,因为大多数的学习算法... -
拓端tecdat|python缺失值处理案例分析:泰坦尼克数据
2019-06-20 14:06:37缺失值处理 真实数据往往某些变量会有缺失值。 首先,我们用 info( ) 语句操作,看到整份数据的大概情况: titanic_df.info() 从这份数据我们可以发现,这里一共有 891 行数据,所以在中间那一列数据中看到... -
python实现缺失值处理
2021-07-07 09:56:50但是如果缺失值占比上升,这种缺失值处理方法误差就很大了。 在采用删除法处理缺失值时,需要首先检测样本总体中缺失值的个数。python中统计缺失值的方法如下: import numpy as np import pandas as pd data = pd....