我在这次学习中,学习到,缺失值类型为数值型数据,则填补中位数,类别型数据就填补众数。。
比较笨,所以我直接写了个方法先来找到每一列数据的中位数和众数。
def mode_and_median(train):
list1=[]
list2=[]
list3=[]
list4=[]
for col in train.columns:#对每一列数据进行循环
# print(col)
dir = train[col].drop_duplicates()#单独列数据进行去重,大于10个的直接跳过
if dir.size>30:
# print("列{}为数值型数据,中位数为{}".format(col,dir.median()))
list1.append(col)
list2.append(dir.median())
if dir.size<10:#对去重后数据进行保存,储存则数据在整一列数据中对数据进行匹配
# print(dir)
c = Counter()
for ch in train[col]:
c[ch] = c[ch] + 1
list3.append(col)
list4.append(c.most_common(1))
# print("列{}为类别型数据,众数值为{}".format(col,c.most_common(1)))
df1 = pd.DataFrame([list1,list2],index = ["列名", "中位数"])
df2 = pd.DataFrame([list3,list4],index = ["列名", "众数"])
df3 = pd.concat([df1,df2])
return df3.T
mode_and_median(train)
输出结果:
找到了每一列数据的中位数和众数。现在我们来查看一些当前数据的缺失值个数,和缺失比例
#查看当前数据的缺失值
total = all_data.isnull().sum().sort_values(ascending = False)
percent = (all_data.isnull().sum()/all_data.isnull().count()).sort_values(ascending = False)
missing_data = pd.concat([total,percent],axis = 1,keys = ['Total','Percent'])
missing_data.head(30)
最后找到对应位置,把相应数值类型进行缺失值填补。列出两列以供参考
features['Electrical'] = features['Electrical'].fillna("SBrkr")#类别型
features['GarageArea'] = features['GarageArea'].fillna("548")#数值型
再来补充一些,今天才学到。。pandas有自带计数的函数,这部分可以不用自己写。。傻了傻了,自己还去写了个计算列数据的方法。。。。哭 。。。
features['Exterior1st']=features['Exterior1st'].fillna(features['Exterior1st'].mode()[0])
这后一部分,features['Exterior1st'].mode()[0]即是计数这一列数据,并去除第【0】,即最大的哪个数,就是我们需要寻找的众数。。(这句话的意思是,在这一列数据中,如果有缺失值,这个缺失值就填补该列的众数。)
好了,上面哪个也不删除了,给自己留个记性。。加油,继续学习
好了,谢谢观看,有空点赞。。来个大佬给我抱个大腿,指点一些我把,大佬楼下留言,小白认真学习中。。。。