Pandas数据分析-Task8

Pandas数据分析-Task8

记录DataWhale的Pandas数据分析的学习过程,使用的教材为 joyful-pandas
Task6是pandas的缺失值处理,内容基本可以分为三个部分,第一部分介绍缺失值的个数统计与删除;第二部分介绍缺失数据的填充与插值’第三部分介绍Nullable数据类型。本篇文章中所有的代码示例中用到的原始文件都可以在 此链接中下载。

思维导图

在这里插入图片描述

练一练

在这里插入图片描述
思路:利用fillna函数,设置limit=1会导致连续缺失值的第一个会被补充,不满足要求,考虑结合method参数,进行两次填充,第一次method=‘ffill’,第二次method=‘bfill’,因为NaN值加任何值结果都为NaN,所以最后将这两次结果相加即可达到要求。

s = pd.Series([ 1,np.nan ,3,np.nan, np.nan])
r1=s.fillna(limit=1,method='ffill')
r2=s.fillna(limit=1,method='bfill')
(r1+r2)/2
>>>
>0    1.0
1    2.0
2    3.0
3    NaN
4    NaN

练习-用回归模型解决分类问题

在这里插入图片描述
在这里插入图片描述
1 .思路:KNeighborsRegressor的输出只能是数值型的,所以无法进行直接分类,一个最直接的想法是类别特征数值化,然后作为label进行拟合。最简单的类别特征数值化的方法就是哑铃编码,pd.get_dummies()函数可以完成这个操作;这里还有一个问题是,KNeighborsRegressor的输出是数值,需要将其映射为类别变量,还需要记住pd.get_dummies()函数编码后的哑铃变量哪个维度代表的哪个类别。

from sklearn.neighbors import KNeighborsRegressor
df = pd.read_excel('data/color.xlsx')
dum=pd.get_dummies(df.Color)
#dum作为数值型的label可以直接进行拟合;同时dum.columns可以看作哑铃编码到实际类别的一个字典映射,方便后续从哑铃编码恢复类别编码。
clf = KNeighborsRegressor(n_neighbors=6)
clf.fit(df.iloc[:,:2], dum)
r=clf.predict([[0.8, -0.2]])
dum.columns[np.array(r[0]).argmax()]#利用dum.columns恢复真实的类别特征。
>Yellow

2 . 第二问和第一问方法基本相同,区别在于第二问需要自己构造出训练集和测试集,而且有多个类别型特征需要转换。

from sklearn.neighbors import KNeighborsRegressor
df = pd.read_csv('data/audit.csv')
r=df.isna().sum() #查看缺失情况。
>>>
>ID              0
Age             0
Employment    100
Marital         0
Income          0
Gender          0
Hours           0
#看出只有Employment列有缺失,将其作为拟合目标,其余列作为特征。

#划分训练集和测试集
full=df[df.Employment.notna()]
na=df[df.Employment.isna()]

label=pd.get_dummies(full['Employment'])#训练集标签
full_feature=pd.concat([full[['Age','Income','Hours']],pd.get_dummies(full[['Marital','Gender']])],axis=1)#训练集特征
na_feature=pd.concat([na[['Age','Income','Hours']],pd.get_dummies(na[['Marital','Gender']])],axis=1)#测试集特征

clf = KNeighborsRegressor(n_neighbors=6)
clf.fit(full_feature, label)
r=clf.predict(na_feature)#拟合结果,每一个样本的结果为一数值向量。

res=[label.columns[i] for i in r.argmax(axis=1)#利用label.columns将数值结果变为真实的类别结果。
df.loc[df.Employment.isna(),'Employment']=res ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值