关于数据分析之空值处理

空值是数据分析中经常遇到的情况,让人无所适从,是当垃圾数据一样抛弃,还是置一些缺省值,尚未定论。就本人而言如果是文本型的一般会填充某个从未遇到的缺省值来替代,如果是数值,一般用加权平均代替,当然有更多的方法。


下图为几条样例数据,关于学生成绩的。

334b7b707758675f49132da0173c6805.png

要进行缺失值分析,首先要进行数据读取,下文是读取csv文件的几个例子。

import numpy as np
from sklearn import neural_network
import pandas as pd
mydata= pd.read_csv('C:\Python\Pycharm\machine\schoolrecord.csv')
print('---------------------------行列取值-----------------------------')
print( '\norgdata=\n',mydata)
columnname=['id','maths','english']
newdata=mydata[columnname]
print( "\nmydata[['id','maths','english']]=\n",newdata)
newdata=mydata.iloc[:,3]
print( '\nmydata.iloc[:,3]=\n',newdata)
newdata=mydata.loc[:,'maths']
print( "\nmydata.loc[:,'maths']=\n",newdata)
newdata=mydata['maths']
print( "\nmydata['maths']=\n",newdata)
newdata=mydata.maths
print( '\nmydata.maths=\n',newdata)
row=mydata.loc[:,'maths']
print( "\nmydata.loc[:,'maths']=\n",row)

22481d048d35f8ad6a45f1b98fa69f8e.png

下列代码是关于缺失值构造的几种常规方法,填0、填平均值、填上一列上一行值。

print('---------------------------空值处理-----------------------------')
mydata= pd.read_csv('C:\Python\Pycharm\machine\schoolrecord.csv')
print( '\nmydata.isna()=\n',mydata.isna())
# 空值填充0
mydata.fillna(0,inplace=True)
print(mydata)
print( '\nmydata.fillna(0,inplace=True)=\n',mydata)

mydata= pd.read_csv('C:\Python\Pycharm\machine\schoolrecord.csv')
print('\nmydata.mean()\n=',mydata.mean())
# 空值填充均值
mydata.fillna(mydata.mean(),inplace=True)
print( '\nmydata.fillna(mydata.mean(),inplace=True)=\n',mydata)

mydata= pd.read_csv('C:\Python\Pycharm\machine\schoolrecord.csv')
# 空值错行填充
mydata.fillna(method='ffill',inplace=True)
print( "\nmydata.fillna(method='ffill',inplace=True)=\n",mydata)
mydata= pd.read_csv('C:\Python\Pycharm\machine\schoolrecord.csv')
# newdata=mydata.fillna(method='ffill',axis=1,inplace=True)  、
# 直接用inplace语法会抛出异常:raise NotImplementedError()
# 空值错列填充
newdata=mydata.fillna(method='ffill',axis=1)
print( "\nmydata.fillna(method='ffill',axis=1)=\n",newdata)

下文是通过多层感知机进行缺省值预测,也称为多层神经网络(大于等于3层,即至少含有1层隐含层),也称为全连接神经网络。

最简单的MLP只含一个隐层,即三层的结构

811143d5f33640d1b11877fea9e9a294.png

# 通过机器学习MLP神经网络算法填充缺失值
mydata= pd.read_csv('C:\Python\Pycharm\machine\schoolrecord.csv')
newdata=mydata.sort_values(by=['maths'],na_position='last')
print('\nnewdata=\n',newdata)
# 获取非空的训练集
train_x=newdata.iloc[:7,1:3]
print('\ntrainx=\n',train_x)
# 获取非空的结果集
train_y=newdata.iloc[:7,3:4]
print('\ntrainy=\n',train_y)
# 多层感知器分类器-MLPClassifier
model=neural_network.MLPClassifier()
# 进行模型训练
model.fit(train_x,train_y)
# 获取空的测试集
test_x=newdata.iloc[7:,1:3]
# 进行模型预测
test_y=model.predict(test_x)
print('\ntest_x=\n',test_x)
print('\ntest_y=\n',test_y)
newdata.iloc[7:,3:4]=test_y.tolist()
print('\nmydata=\n',mydata)
print('\nnewdata=\n',newdata)

e4a34a77b49f7c0b74fa7bb88d190166.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python与大数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值