网站建设 杭州市萧山区,淮北seo排名,网站手机端排名软件,福建省建设执业资格注册管理中心网站此系列文章收录在公众号中#xff1a;数据大宇宙 数据处理 E-pd
转发本文并私信我python#xff0c;即可获得Python资料以及更多系列文章(持续更新的)
经常听别人说 Python 在数据领域有多厉害#xff0c;结果学了很长时间#xff0c;连数据处理都麻烦…
此系列文章收录在公众号中数据大宇宙 数据处理 E-pd
转发本文并私信我python即可获得Python资料以及更多系列文章(持续更新的)
经常听别人说 Python 在数据领域有多厉害结果学了很长时间连数据处理都麻烦得要死。后来才发现原来不是 Python 数据处理厉害而是他有数据分析神器—— pandas
前言
Excel 中除了 Vlookup 函数一系列条件统计函数(sumif、countif、maxif)就用得最多毕竟在 Excel 中进行数据统计是常见需求。
今天我们来看看在 pandas 中如何做到条件统计。
本文使用泰坦尼克号沉船事件的乘客名单作为例子pclass船舱等级survived是否生还fare票价sex性别home.dest住址需求1性别统计
男女分别有多少人
这需要我们在Excel中有很多方式完成比如透视表或函数公式下面简单列出函数公式的做法简单使用 countifs 即可这里不再单独使用 countif 了管他是否只有一个条件统一用 xxxifs 类函数即可
在pandas不会有啥条件统计函数的因为这就是先筛选再统计行2得到 性别 列是女性的 bool 列行3df[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 用于文本规则条件匹配
如果希望从零开始学习 pandas 那么可以看看我的 pandas 专栏。