Summary of learning data analysis(二)

Summary of learning data analysis(二)

数据清洗及特征处理

1.缺失值观察与处理

##缺失值观察
df.isnull.sum()        #查看每个特征缺失值的个数
#df.isnull().mean()    #查看每个特征下缺失值所占比例
#df.info()

##缺失值处理
##常用dropna()和fillna()两函数
df_drop = df.dropna(subset=['Age']) #subset: 对特定的列进行缺失值删除处理

##向下填充
df.fill = df.copy
df_fill.Age.fillna(method='ffill',inplace=True)
##向上填充
df_fill.Age.fillna(method='bfill',inplace=True)
##均值填充
df_fill.Age.fillna(df.fill.Age,mean(),inplace=True)


drop()函数

参数说明
axis0为行,1为列
howdefault ‘any’指带缺失值的所有行;‘all’指清除全是缺失值的
threshint,保留含有int个非空值的行
subset对特定的列进行缺失值删除处理
inplace这个很常见,True表示直接在原数据上更改

fillna()函数

参数说明
inplaceTrue of False
method{‘pad’, ‘ffill’,‘backfill’, ‘bfill’, None}, default None
limit限制填充个数
axis修改填充方向

Problem:检索空缺值用np.nan比用None要好,原因何在

Solution:数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan

type(np.nan)  # <class 'float'>
type(None)    #<class 'NoneType'>

2.重复值观察与处理

##重复值观察
df[df.duplicated()]

在这里插入图片描述

df.drop_duplicates()  #就地修改

在这里插入图片描述

3.特征观察与处理
对数据中的特征进行观察,大致可将特征分为两类:
数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征,数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析(如利用独热编码one-hot)

  • 对年龄进行分箱(离散化)处理
##将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
##cut()函数用于将数据进行离散化
df['AgeBand'] = pd.cut(df['Age'], 5,labels = ['1','2','3','4','5'])
##将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = ['1','2','3','4','5'])
##将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = ['1','2','3','4','5'])
df.head()
##保存修改后的数据至新文件
df.to_csv('test_pr.csv')
  • 对文本变量进行转换(编码)
##查看文本变量名及种类,使用value_counts()函数
df['Sex'].value_counts()

##将性别(文本)转化为1/2表示,1.使用replace()函数 2.使用map()函数
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
#df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})

#ont-hot编码
df.join(pd.get_dummies(df[['Sex', 'Cabin','Embarked']])).head() #可选prefix参数添加前缀,prefix_sep添加分隔符

在这里插入图片描述

  • 从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等)
#写入代码
df['Titles']=df['Name'].str.extract('(["Mr","Miss","Mrs"]+)\.')
df.head()

参考文章
df.str.extract()函数参见:https://www.jianshu.com/p/2e9b0a56405a

来自KDD🍻小组@邺调https://blog.csdn.net/weixin_45569785/article/details/108112681

参考博客https://blog.csdn.net/weixin_45569785/article/details/108112681

pd.cut()函数参见:https://blog.csdn.net/starter_____/article/details/79327997?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值