动手学数据分析
第二章 数据清洗及特征处理
一、数据清洗的原因:我们拿到的原始数据由于统计方法或者统计过程出现的纰漏通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗,第二章通过学习缺失值、重复值、字符串和数据转换等操作,实现将数据清洗成可以分析或建模的数据的功能。
二、观察与发现
既然要处理数据中的异常点,首先就得找到异常点,
第一步,dateframe.info()函数用于获取DateFrame的简要摘要,方便我们快速浏览数据集;
或者我们采df.isnull().sum() 函数将为空的异常数据显示出来。三、对缺失值进行处理
既然已经找到数据,那我们应该对他进行处理了,
我们可以使用dropna函数进行处理;
from pandas import read_csv;
df = read_csv('E://pythonlearning//datacode//firstpart//4//4.4//data.csv');
newDF = df.dropna();在这里插入图片描述
如下图为函数功能展示
Q:检索空缺值用np.nan,None以及.isnull()哪个更好,为什么?
A:数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan
首先创建一个DataFrame:
bb = pd.DataFrame({'a':[0,1,2,np.nan]})
bb
**>>> a
0 0.0
1 1.0
2 2.0
3 NaN**
先测试一下np.isnan()
np.isnan(bb)
>>> a
0 False
1 False
2 False
3 True
值得一提的是,如果想获悉整个DataFrame有无空值,可以在此基础上这样做:
np.isnan(bb).all()
>>> a False
dtype: bool
# 这行是指返回值的dtype
再测试一下isnull()
pd.isnull(bb)
**>>> a
0 False
1 False
2 False
3 True*
四、重复值的观察与处理
观察:
df[df.duplicated()]
处理:
df = df.drop_duplicates()
df.head()
五、特征观察与处理
我觉得特征值的处理是数据分析的精髓之一,我们需要将不同数据按照特征进行分类如数值特征和文本特征,数值型特征又可分为离散和连续(高数概念,离散表示数与数直接不连续,比如1-2之间可以无限分割,我们平常见到的连续的数比较多,而计算机只能处理离散的数据),一般来说数据特征更适用于进行建模与运算,如果遇到文本数据我们还要将其转化为数值数据。
具体操作:对年龄进行分箱(离散化)处理
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
df.head()
df.to_csv('test_cut.csv')
:将数据保存为CSV格式方便下次处理
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
df.head(3)
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
df.head()
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210617225029787.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzI4Mzk1,size_16,color_FFFFFF,t_70)