通过对数据的初步观察,可能会发现数据存在某些问题,如缺失值、重复值、离群值等,因此,需要对数据进行清洗、加工,以便于之后的数据分析
一、缺失值
首先想了解缺失值的大致情况,因此可以采用如下函数
# 快速了解各列 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
浙公网安备 33010602011771号