前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas每天一题-题目5:统计空值数量也有多种实现方式

pandas每天一题-题目5:统计空值数量也有多种实现方式

作者头像
咋咋
发布2021-09-01 14:21:18
9310
发布2021-09-01 14:21:18
举报
文章被收录于专栏:数据大宇宙数据大宇宙

这是一个关于 pandas 从基础到进阶的练习题系列,来源于 github 上的 guipsamora/pandas_exercises 。这个项目从基础到进阶,可以检验你有多么了解 pandas。

我会挑选一些题目,并且提供比原题库更多的解决方法以及更详尽的解析

计划每天更新一期,希望各位小伙伴先自行思考,再查看答案。如果对你有帮助,记得转发推荐给你的好友!

上期文章:pandas每天一题-题目4:原来查找top n记录也有这种方式

后台回复"数据",可以下载本题数据集

如下数据:

数据描述:

  • 此数据是订单明细表。一个订单会包含很多明细项,表中每个样本(每一行)表示一个明细项
  • order_id 列存在重复
  • quantity 是明细项数量

需求:请列出每一列的缺失值、缺失百分比。

下面是答案了


方式1

代码语言:javascript
复制
df.info()
  • df.info() 可以列出数据集整体信息
  • 但是这个信息太杂乱,并不适合本需求

方式2

首先我们知道 Series(一列) 有 isna 方法,返回每个单元格是否为空:

代码语言:javascript
复制
df['item_price'].isna()
  • 返回结果仍然是一个 Series(一列)
  • Python 中 True 是1,False 是0

只需要这基础上求和,即可得到 na 的数量:

代码语言:javascript
复制
df['item_price'].isna().sum()

因此,只需要遍历每一列做同样的步骤即可:

代码语言:javascript
复制
df.apply(
    lambda col: col.isna().sum(), 
    axis=0)
  • 行1:df.apply 用于遍历行或列
  • 行3:参数 axis=0 ,遍历列
  • 行2:因此,col 参数为每一列(Series)

现在,很容易整理成表格:

代码语言:javascript
复制
na_count = df.apply(
    lambda col: col.isna().sum(), 
    axis=0)
na_count.name = 'na数量'

na_percents= na_count / len(df)
na_percents.name = 'na占比'

pd.concat([na_count,na_percents],axis=1)
  • 行4:Series 有一个 name 属性,当他转成表格时(DataFrame),这个值就会成为列名
  • 行6:上一步结果除以记录数,即可得到占比
  • 行9:把2个 Series 合并,因为是横向合并,设置参数 axis=1

方式3

上一步用到 concat 稍显复杂,有没有常规操作就能做到?

首先,一个列可以直接转成表格:

代码语言:javascript
复制
na_count = df.apply(
    lambda col: col.isna().sum(), 
    axis=0)

na_count.to_frame('na数量')
  • 行5:Series.to_frame 即可转 DataFrame,第一个参数还可以设置列名

有了表格,接下来就简单多了:

代码语言:javascript
复制
na_count = df.apply(
    lambda col: col.isna().sum(), 
    axis=0)

res = na_count.to_frame('na数量')
res['占比'] = res['na数量'] / len(df)
res
  • 行6:常规操作,不存在的列名赋值,表示新增列

推荐阅读:

Python干货,不用再死记硬背pandas关于轴的概念?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据大宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方式1
  • 方式2
  • 方式3
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档