前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >懂Excel轻松入门Python数据分析包pandas(十九):文本条件统计

懂Excel轻松入门Python数据分析包pandas(十九):文本条件统计

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

> 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas

前言

Excel 中除了 Vlookup 函数,一系列条件统计函数(sumif、countif、maxif)就用得最多,毕竟在 Excel 中进行数据统计是常见需求。

今天我们来看看在 pandas 中如何做到条件统计。

本文使用泰坦尼克号沉船事件的乘客名单作为例子:

- pclass:船舱等级

- survived:是否生还

- fare:票价

- sex:性别

- home.dest:住址

需求1:性别统计

"男女分别有多少人?"

这需要我们在 Excel 中有很多方式完成,比如透视表或函数公式,下面简单列出函数公式的做法:

- 简单使用 countifs 即可

> 这里不再单独使用 countif 了,管他是否只有一个条件,统一用 xxxifs 类函数即可

在 pandas ,不会有啥条件统计函数的,因为这就是先筛选,再统计:

- 行2:得到 性别 列是女性的 bool 列

- 行3:df[cond] 就是女性的记录,简单通过 len 方法,即可得到记录数(人数)

不过你可能会觉得这很麻烦,因为如果还要男性的人数,也需要执行一次差不多的代码。

实际上我们可以直接对 性别 列分组统计即可:

- 不多说了,代码语义简直与中文一样

- 这里唯一不好的地方是,需要通过 size 方法获得每个分组的记录数

需求2:不同的统计方法

刚刚是求人数,现在希望求出女性的平均票价。

以下是 Excel 的公式做法:

那么 pandas 的做法呢?

想必聪明的你一定大概知道怎么做,pandas 中求平均的是方法 mean:

- 行3:同样语义非常清晰。.fare.mean() 恰好反映"票价的平均"

同样,简单分组即可一次获得所有分组的统计信息:

- 按 sex 分组,求 票价 的 平均

需求3:非常规匹配

上面的条件都是完全符合,有时候我们需要统计有包含关系的条件。

"住址是New York 的人数"

Excel 的 xxifs 类函数公式都能支持通配符:

- 前后用 * 包围内容,表示包含此内容即符合条件

在 pandas 中,由于筛选与统计是独立分开的,因此只需要知道怎么筛选,那么此需求即可迎刃而解:

- 行2:由于 住址 列是字符串类列,使用 .str 可访问字符串类型列的各种方法

- contains 判断列中是否包含指定内容。如果本身内容是 nan(不存在值) ,那么直接赋值为 False

如果我们只需要 住址 结尾是 NY 的人数?

Excel 中由于用通配符,因此表达更直接:

- 注意,没有修改公式,只是输入内容变成 *NY ,表示 NY 前面可以是任意内容

在 pandas 这麻烦多了,这次不能使用 contains 方法:

- 行2:使用 endswith 方法即可完成

怎么与 Excel 的统计结果不一样!!

你会发现,Excel 的统计结果包含小写字母的 ny 结尾!

一次解决所有问题

以上 pandas 的做法主要有以下问题:

- 不能用通配符表达不同的文本规则,只能用不同的方法,我记不住这么多方法呀

- 不能忽略大小写(实际上面的需求,pandas 的结果更合理)

其实 .str.contains 方法本身就是使用正则表达式,我们可以直接用 contains 解决所有文本规则相关问题:

- 行2: NY$ ,表示 NY 在结尾处

- 参数 case = False ,不区分大小写

pandas 用于文本匹配的还有 match 方法,此系列文章不再深入讲解了。更多高级应用方法,请关注 pandas 专栏 [带你玩转Python数据处理—pandas]

总结

本文重点:

- 构造 bool 列,是核心知识点

- Series.str.contains 用于文本规则条件匹配

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

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

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

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

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