如果你觉得文字看着枯燥,可以看配套讲解视频:讲解视频
对于数据挖掘的缺失值的处理,应该是在数据预处理阶段应该首先完成的事,缺失值的处理一般情况下有三种方式:
(1)删掉缺失值数据
(2)不对其进行处理
(3)利用插补法对数据进行补充
第一种方式是极为不可取的,如果你的样本数够多,删掉数据较少,这种情况下还是可取的,但是,如果你的数据本身就比较少,而且还删除数据,这样会导致大量的资源浪费,将丢弃了大量隐藏在这些记录中的信息.利用插补法对数据进行补充,是极为推荐的一个方式.
常见的插补法有以下几种:
1.用固定值插补
#输出文件名
outputfile = "data.xls"
#读入文件
catering_sale = "catering_sale.xls"
#填补数据
data['空缺值所在列名'] = data['空缺值所在列名'].fillna('填补的数据')
#输出到指定文件
data.to_excel(outputfile)
2.用均值插补
#输出文件名
outputfile = "data.xls"
#读入文件
catering_sale = "catering_sale.xls"
#填补数据
data['空缺值所在列名'] = data['空缺值所在列名'].fillna(data['空缺值所在列名'].mean())
#输出到指定文件
data.to_excel(outputfile)
3.用众数插补
#输出文件名
outputfile = "data.xls"
#读入文件
catering_sale = "catering_sale.xls"
#填补数据
data['空缺值所在列名'] = data['空缺值所在列名'].fillna(data['空缺值所在列名'].mode()[0])
#输出到指定文件
data.to_excel(outputfile)
这里强调一下,看了很多其他的博客,在用众数填充时,都是直接data['空缺值所在列名'].mode(),我尝试了很多遍,发现一直填充不进去,后来查阅资料才发现pandas返回的是一个series(因为众数不止一个),而不像median,mean这些返回特定一个值,所以必须在后面加上下标值【0】,才能进行填充(必须加下标值,必须加下标值,必须加下标值,重要的话说三遍)
4.用中位数插补
#输出文件名
outputfile = "data.xls"
#读入文件
catering_sale = "catering_sale.xls"
#填补数据
data['空缺值所在列名'] = data['空缺值所在列名'].fillna(data['空缺值所在列名'].median())
#输出到指定文件
data.to_excel(outputfile)
5.用上下数据插补
用前一个数据填补
#输出文件名
outputfile = "data.xls"
#读入文件
catering_sale = "catering_sale.xls"
#填补数据
data['空缺值所在列名'] = data['空缺值所在列名'].fillna(method='pad')
#输出到指定文件
data.to_excel(outputfile)
用下一个数据填补
#输出文件名
outputfile = "data.xls"
#读入文件
catering_sale = "catering_sale.xls"
#填补数据
data['空缺值所在列名'] = data['空缺值所在列名'].fillna(method='bfill')
#输出到指定文件
data.to_excel(outputfile)
6.用插值法插补
#输出文件名
outputfile = "data.xls"
#读入文件
catering_sale = "catering_sale.xls"
#填补数据
data['空缺值所在列名'] = data['空缺值所在列名'].interpolate()
#输出到指定文件
data.to_excel(outputfile)