python必备库 学习笔记 pandas(二)

pandas

缺失值(nan)处理

处理思路

1.思路一
针对数据量比较大的样本,我们可以直接删除掉有缺失值的几行数据即可
2. 思路二
用改行的平均值、中位数等其他指标来对缺失值进行替换

判断是否存在nan

  1. pandas.isnull(DataFrame)
    非nan返回False,nan返回True
  2. pandas.notnull(DataFrame)
    非nan返回True,nan返回False

删除含nan的样本

DataFrame.dropna(inplace=False)

  • inplace:是否直接在原DataFrame上进行修改,=False表示在原DataFrame上进行修改,=True表示返回新的DataFrame,默认是False

替换/插补

DataFrame.fillna(value,inplace=False)

  • value:用于替换nan的值
  • inplace:是否直接在原DataFrame上进行修改,=False表示在原DataFrame上进行修改,=True表示返回新的DataFrame,默认是False

实例

  1. 检测是否存在nan

    方法一
    pandas.isnull(DataFrame)会判断DataFrame里每个元素值,为nan返回true,不是nan返回False
    numpy.any(values)判断values里面的所有值,只要有一个true,就返回true;全为false就返回false
    也就是说,np.any(pd.isnull(data))的结果为true就说明data里面含有nan
    在这里插入图片描述
    方法二
    pandas.any(values)分别在每个字段里判断values,只要有一个true,就返回true;全为false就返回false,最终返回每个字段的bool值
    pd.isnull(data).any()表示,为true的字段含有nan
    在这里插入图片描述
    pandas.innull()和pandas.notnull()用法一样,均可用于检测nan,返回值相反

  2. 处理nan值

    1. 删除含nan的样本

      原文件是20640行,删除含nan的行后是20433行
      在这里插入图片描述

    2. 替换nan值
      用该列的平均值或其他指标替换nan

      之前求得,nan值是在total_bedrooms列上,现在用该列平均值替换nan即可
      在这里插入图片描述
      data[‘total_bedrooms’].fillna(value=data[‘total_bedrooms’].mean(),inplace=True),用total_bedrooms列的平均值替换该列的nan值,最后检测发现没有nan
      在这里插入图片描述
      一般来说,删除nan和替换nan只用其一

非nan的缺失值处理

常见的非nan的缺失值,如?、#等

处理思路

  1. 将其替换成nan
    DataFrame.replace(to_replace=,value=)
    • to_replace:想替换的符号,如’?‘
    • value:用于替换的值
      在这里插入图片描述
      用numpy.nan替换?
      在这里插入图片描述
  2. 处理nan

见上面 缺失值(nan)处理

数据离散化

什么是数据离散化

连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。


原始数据:年龄25、58、35…
将年龄分为几个阶段[18-30),[30-45),[45-60)
这样就可以将数据分到三个区间,最终变成一个矩阵
    [18-30)  [30-45)  [45-60)
    成年   中年    老年
25    1    0     0
58    0    0     1
35    0    1     0

这种数据表示方法就是数据离散化,这种方法叫做one-hot编码/哑变量

为什么要离散化

连续属性的离散化是为了简化数据结构,离散化技术可以用来减少给定连续属性值的个数,离散化方法经常作为数据挖掘的工具

数据离散化思路

  1. 分组
    自动分组:pandas.qcut(data,bins)

    • data:需要分组的数据
    • bins:需要分的组数

    自定义分组:pandas.cut(data,list)

    • data:需要分组的数据
    • list:自定义好的分组区间用列表形式传入

    分组完成之后,会返回一个Series

  2. 将分组好的数据转化为one-hot编码
    pandas.get_dummies(series,prefix)

    • series:之前分组好的序列
    • prefix:显示结果分组的前缀

实例

  1. 需要处理的数据
    在这里插入图片描述
  2. 分组
    对原数据进行自动分组
    在这里插入图片描述
    对原数据进行自定义分组
    在这里插入图片描述
  3. 将序列转化为one-hot编码 在这里插入图片描述

pandas.concat()

pandas.concat([df1,df2],axis=1)

  • 按行或列进行合并,axis=0为列,axis=1为行
    示例
    将下列两个df合并
    在这里插入图片描述
    在这里插入图片描述
    在df1列上对df2进行合并
    在这里插入图片描述
    在df1行上对df2进行合并
    在这里插入图片描述
    如果两个df字段不一致的情况下进行列合并,则df2中没有df1的字段会填充nan,df1中没有df2的字段也会填充nan
    在这里插入图片描述

pandas.merge()

pandas.merge(left,right,how=‘inner’,on)

  • left:左侧表
  • right:右侧表
  • how:连接方式,默认是inner内连接,left左连接,right右连接
  • on:连接的字段,用于连接的字段会自动去重

pandas.merge()超详细讲解

交叉表

交叉表用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)
pandas.crosstab(values1,values2)

用ocean_proximity,median_house_value两列画交叉表,前者代表与海的距离,后者代表房价
在这里插入图片描述
生成的交叉表如图,
在这里插入图片描述
交叉表的索引是ocean_proximity列上的所有取值
在这里插入图片描述

透视表

DataFrame.pivot_table([],index)

  • []:需要分组的字段
  • index:分组之后的索引

直接生成ocean_proximity与对应的平均房价表
在这里插入图片描述

分组与聚合

什么是分组与聚合

分组与聚合是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况

  • 分组:将含有某个或某些共同属性的数据分到同一个组,如某位学生的各科成绩,
  • 聚合:将每组的数据求出最大值或最小值就是一个聚合的过程

如何实现分组与聚合

  • 分组 DataFrame/Series.groupby(key,as_index=False)
  • key:分组的列数据,可以多个
    原始数据data3, DataFrame.groupby()
    在这里插入图片描述
    对data3按name进行分,分组的结果并不能直接看到,需要聚合之后才能看到
    在这里插入图片描述
  • 聚合 :求某个统计值就是聚合
    对data3聚合,求出每列的最大值
    在这里插入图片描述
    对data3聚合,求出每列的平均值
    在这里插入图片描述
发布了85 篇原创文章 · 获赞 158 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Late_whale/article/details/104446293
今日推荐