DataWhale-动手学数据分析-Task02

昨天忘记贴上这门课程的链接了,今天补上 https://github.com/datawhalechina/hands-on-data-analysis

第二次任务主要是关于数据清洗和特征处理的,记得之前上课老师说做项目基本要花过半的时间在数据上面,想必这两块都十分重要。

一、数据清洗

1)缺失值查看

找出数据中缺失值的方法常见的有np.isnan()和pd.isnull(),它们的输入可以是DataFrame格式的,但要注意np.isnan()只支持对数值型对象进行判断,pd.isnull()则没有这个限制。DataFrame本身也有isnull方法,如df.isnull()。此外,要注意np.nan是一个特殊的存在,不能直接用"x == np.nan"来判断。

type(np.nan)
>>> float
np.nan == np.nan
>>> False

上面的方法加上.sum()或者df.info()可以查看缺失值数量。

2)缺失值处理

这篇文章中有比较详细的介绍 https://zhuanlan.zhihu.com/p/40775756

总的来说,大概分为剔除、用固定值替换、拟合或是不处理几种。

剔除常用df.dropna(how='any', inplace=False),any指一条数据只要有一个NaN就删除。

替换常用df.fillna(value),以value替换df中所有的NaN。

3)重复值查看:常用df.duplicated()

4)重复值处理:一般直接删掉df.drop_duplicates()

5)其他

也可以结合数据实际的物理意义和应用场景做进一步的数据清洗,方法有如异常值检测、剔除离群点等。

二、特征处理

特征大概可以分为两类:数值型特征和字符型特征。数值型特征又可分为连续型数值(如身高、体重)和离散型数值(如年龄、类别),字符型特征常转换为数值后处理。值得注意的是,数值变量可分为nominal(定类)、ordinal(定序)、interval(定距)和ratio(定比)四种,具体可参考https://blog.csdn.net/atytjmt/article/details/88813377。建立模型时可特殊处理,如转换为哑变量(采用One-hot编码)。

1)分箱操作

可以将连续变量离散化,转换为标签。如

df['AgeBand'] = pd.cut(df['Age'],5,labels=[1,2,3,4,5])

将Age这一特征排序后平均划分为5个年龄段,分别用1-5作为类别变量。

df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])

将特征Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,分别用1-5作为类别变量。

df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])

将特征Age按比例10% 30% 50 70% 90%划分为五个年龄段,分别用1-5作为类别变量。

2)将字符型变量转换为离散类别变量

常用三种方法:df.replace()、df.map()、sklearn.preprocessing.LabelEncoder()

One-hot编码:用pd.get_dummies()比较方便

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值