2021-06-17 第二章:数据清洗及特征处理

2.1缺失值观察与处理

2.1.1 任务一:缺失值观察
pandas里边查找NaN值的话,可以是.isna(),也可以是.isnull()

  • isna的意思是判断是不是 not a number,主要是数值字段;
  • isnull的意思是判断是否为空值
  • 1)
    df.isna().sum() 查看空值信息
    df.isnull().sum() 查看空值信息
    df.info() 查看数据信息
  • 2)
    df[['Age','Cabin','Embarked']]
    pd.DataFrame(df,columns=['Age','Cabin','Embarked'])
    df.loc[:,['Age','Cabin','Embarked']]
    df.iloc[:,[5,10,11]]
  • loc只能通过index和columns来取,不能用数字; iloc只能用数字索引,不能用索引名

2.1.2 任务二:对缺失值进行处理

  1. 处理缺失值的思路一般是用dropna函数与fillna函数
  2. 请尝试对Age列的数据的缺失值进行处理
  • age_nan=df[df['Age'].isnull()].index
    df.loc[age_nan,'Age']=0
    df
    处理age列的缺失值赋值为0
  • df[df['Age'].isnull()]=0
    df[df['Age'] == np.nan] = 0
    df[df['Age']==None]=0
    处理age列的缺失值整行赋值为0
  1. 直接对整张表的缺失值进行处理
  • df.dropna() 默认axis=0,表示删除包含缺失值的行
    axis=0 行,axis=1列
    how{‘any’, ‘all’},默认‘any’; 当我们至少有一个 NA 或所有 NA 时,确定是否从 DataFrame 中删除了行或列。
    ‘any’:如果存在任何 NA 值,则删除该行或列。
    ‘all’:如果所有值都是 NA,则删除该行或列。
    thresh: axis中至少有thresh个非缺失值,否则删除。
    subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除
    inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。默认是False,即创建新的对象进行修改;如果是true,执行操作并返回 None。
    指定删除某个分组(可以理解成哪几列或那几个标签)中的含有缺失值的行或列 df.dropna(subset=['Pclass','Parch','Embarked'])

  • df.fillna(0) 用数字0填充缺失值

    截屏2021-06-16 11.49.17.png

    df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) 表示填充缺失值
    value: 需要用什么值去填充缺失值
    axis: 确定填充维度,从行开始或是从列开始
    method: 填充缺失值所用的方法。''ffill' 'backfill/bfil'
    limit: 确定填充的个数,如果limit=2,则只填充两个缺失值。

  • ffill:用缺失值前面的一个值代替缺失值

  • backfill/bfill:缺失值后面的一个值代替前面的缺失值


    截屏2021-06-16 12.22.26.png

参考:
https://zhuanlan.zhihu.com/p/109366433
https://zhuanlan.zhihu.com/p/109434512
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

2.2 重复值观察与处理

2.2.1 任务一:请查看数据中的重复值
df[df.duplicated()]

2.2.2 任务二:对重复值进行处理
(1) 重复值有哪些处理方式呢?

  • drop_duplicates函数用于删除Series、DataFrame中重复记录,并返回删除重复后的结果
    (2) 处理我们数据的重复值
  • df.drop_duplicates()

2.2.3 任务三:将前面清洗的数据保存为csv格式
df.to_csv('./titanic/train_clear.csv')

2.3 特征观察与处理

2.3.1 任务一:对年龄进行分箱(离散化)处理

  1. 数据分箱是一种将多个连续值分组为较少数量的“分箱”的方法,分箱的数据不一定必须是数字,可以是文字,也可以是像素;一般在建立分类模型时,需要对连续变量离散化,特征离散化后,模型会更稳定,降低了模型过拟合的风险;
    对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开
  • df['age_bin_1'] = pd.qcut(df['age'],3) #新增一列存储等频划分的分箱特征(每个区间的样本个数都是一样)
    df['age_bin_2'] = pd.cut(df['age'],3) #新增一列存储等距划分的分箱特征

将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示

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

将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示

  • df['Age_bin_2'] = pd.cut(df['Age'],[0,5,15,30,50,80],right = False, include_lowest = True,labels=['1','2','3','4','5'])

将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示

  • df['Age_bin_3'] = pd.cut(df['Age'], [0.0,0.1,0.3,0.5,0.7,0.9], labels=['1','2','3','4','5'])

2.3.2 任务二:对文本变量进行转换
(1) 查看文本变量名及种类

  • value_counts()
  • unique()


    截屏2021-06-16 21.21.13.png

(2) 将文本变量Sex, Cabin ,Embarked用数值变量12345表示

  • LabelEncoder是对不连续的数值或文本进行编码。
    fit(y) :fit可看做一本空字典,y可看作要塞到字典中的词。
    fit_transform(y):相当于先进行fit再进行transform,即把y塞到字典中去以后再进行transform得到索引值。
    inverse_transform(y):根据索引值y获得原始数据。
    transform(y) :将y转变成索引值。
    (版权声明:此处为CSDN博主「桂小林」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/quintind/article/details/79850455)

截屏2021-06-17 14.04.37.png

参考:
https://blog.csdn.net/quintind/article/details/79850455

(3) 将文本变量Sex, Cabin, Embarked用one-hot编码表示
One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。除了整数的索引之外,它都是零值,它被标记为1。
one-hot编码表示分类结果,表示1,那就是[1, 0, 0, 0, 0],表示4,那就是[0, 0, 0, 1, 0]
参考:
https://zj-image-processing.readthedocs.io/zh_CN/latest/pytorch/one-hot%E7%BC%96%E7%A0%81/

2.3.3 任务三:从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等)

  • 采用str.extract()函数可用正则从字符数据中抽取匹配的数据
  • [A-Za-z]代表任一字母(大写或小写)
  • 代表+号前的字符出现1次或多次
    ([A-Za-z]+). 是匹配 一个或多个字母并且以.结尾的所有字符串组合
  • pat:具有捕获组的正则表达式模式。
    flags:int,默认值为0(无标志)
    expand:如果为True,则返回每个捕获组只有一列的DataFrame
    参考:https://www.cda.cn/discuss/post/details/5e848409e7f3136e853521bc
    https://vimsky.com/examples/usage/python-pandas-series-str-extract.html
    截屏2021-06-17 11.46.26.png

你可能感兴趣的:(2021-06-17 第二章:数据清洗及特征处理)