通过对数据的初步观察,可能会发现数据存在某些问题,如缺失值、重复值、离群值等,因此,需要对数据进行清洗、加工,以便于之后的数据分析

一、缺失值

首先想了解缺失值的大致情况,因此可以采用如下函数

# 快速了解各列
df.info()  # 返回列名、非空数值个数、数据类型

# 查看某一列
df['columnname'].isnull() # 返回布尔值。可通过sum()函数进行计数,也可直接调用看各列的缺失情况

对缺失值的处理主要有两方面:清除或填充

# 清除缺失值
df.dropna() # 删除数据框中含有缺失值的行,可通过指定参数how='all'的方式删除整行都为缺失值的行

# 填充缺失值
df.fillna() # 将所有的缺失值都填充为某一个值;可传入一个字典,从而将不同列的缺失值设为不同的填充值

注意:注意某列的缺失值类型

二、重复值

与缺失值的处理思路类似。先观察,再处理

df.duplicated()  # 此函数会对数据框中进行重复值的判断,返回布尔值。因此,可用此结果为索引

a=df.drop_duplicates()  # 此函数可删除重复行,通过设置keep参数为first,保留第一行;为last,保留最后一行;为False,删除所有重复值

三、特征观察与处理

由于dataframe中各列的数据类型不同,因此需要做一定的处理\转化,才有助于进一步的分析

处理连续数据

# 对某连续型数据进行离散化处理

pd.cut(df['columnnames'],bin_num) # 将数据均分
pd.qcut(df['columnnames'],q=bin_num)  # 将数据均分

pd.cut(df['columnnames'],[a,b,c,d,e]) # 指定断点 
pd.qcut(df['columnnames'],[a,b,c,d,e]) # 指定断点,这里的数据为小数,即依据百分位数进行分箱
# 上述表达式中均可指定labels=[] ,以指定标签

处理字符数据

# 对某字符型数据进行处理
#快速查看字符型数据的内容

df['columnnames'].unique() # 返回类别
df['columnnames'].nunique() # 返回各类别包含的数据个数

df['columnnames'].value_counts # 返回各类别及对应的数据个数

# 转换,将字符换为数字标签
df['columnnames'].replace([old1,old2],[new1,new2])  # 通过replace函数处理
df['columnnames'].map({old1:new1,old2:new2}) # 通过map函数,传入dict

需要注意的是,可采用机器学习的某些功能来实现文本内容的转化

# sklearn 库
from sklearn.preprocessing import LabelEncoder

ledr=LabelEncoder() # 实例化一个对象
ledr.fit([lable1,label2,lable3,lable1]) # 传入一个标签列表,进行拟合
ledr.classes_  # 返回包含各类别的列表
ledr.transform([label3,label2,label1]) # 对传入的标签列表进行标准化,返回0到(nclass-1)的数值
ledr.inverse_transform([0,1,2]) # 将标准化结果还原为标签
ledr.fit_transform([label3,label2,label1]) # 先拟合,再标准化

# one-hot,独热编码
# 直观且粗糙的解释为,用nclass个二进制的数字来表示某一类别,若属于某一类别,则类别该对应位置为1,其他位置为0
# 例如,有A B 两个类别,且A类别有3中取值,B类别有2种取值,因此共5个类别,A3应为 0 0 1 0 0
pd.get_dummies(df['columnnames'],preifx='') # 也可传入某一dataframe,可指定前缀,若不指定,默认用类别名或从0开始的数字作为前缀

从文本数据里提取特征

df['columnnames'].str.extract() # 从中抽取匹配的第一个数据,输入的参数可以是字符或正则表达式;若想索取所有数据,应采用str.extractall()

 

感悟:

1.缺乏机器学习的数理基础,但不代表完全无法使用机器学习,尽量通俗地理解其原理与参数的含义,还是可以借助它实现一些功能的

2.对正则表达式的复习要提上心了,它的使用场景还是蛮多且灵活的  

参考链接:

1.sklearn中labelencoder介绍  

sklearn.preprocessing.LabelEncoder的作用(超详细) - 知乎 (zhihu.com)

11.sklearn.preprocessing.LabelEncoder的作用 - 笨蛋敏 - 博客园 (cnblogs.com)

2.one-hot介绍

详解one-hot编码 - 帅帅的飞猪 - 博客园 (cnblogs.com)

机器学习数据预处理1:独热编码(One-Hot)及其代码_梦Dancing的博客-CSDN博客_onehot编码

3.get_dummies函数介绍

(1条消息) pandas.get_dummies函数用法详细解答(实践)_skywf的博客-CSDN博客_python中get_dummies函数

4.str.extract函数介绍

pandas中字符数据的处理方法:str.extract() 和 Series.str属性_hello world!-CSDN博客_str.extract

 

posted on 2021-12-14 22:21  宝joM  阅读(223)  评论(0)    收藏  举报