Python 教学 | Pandas 妙不可言的条件数据筛选

这篇具有很好参考价值的文章主要介绍了Python 教学 | Pandas 妙不可言的条件数据筛选。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Part 1  前言

Part 2  Excel 的数据筛选与分布统计

Part 3  Pandas 条件数据筛选

1、条件数据筛选的不同维度

(1) 比较数据值

(2) 是否为空值

(3) 文本内容筛选

(4) 数据值长度

(5) 日期筛选

(6) 其他

2、复合条件筛选

Part 4  总结

Part 5  Python教程


Part 1  前言

在 Python 中,第三方库 Pandas 是数据清洗、处理、分析中的主力工具,几乎所有基于表格数据的需求都能在 Pandas 中得到实现,这也是 Python 语言在数据分析领域独占鳌头的一大因素。在上期技术文章中,我们介绍了 Pandas 中的数据选取功能,这为我们未来批量处理数据打下了良好的基础,本期文章我们将继续介绍 Pandas ,学习处理表格数据十分常用的数据筛选功能。在 Excel / WPS 等 office 软件中,数据筛选经常被使用到,而Pandas 自然也具备数据筛选功能,不仅如此,由于 Pandas 背靠 Python 语言,使得它在字符处理方面具备天然的优势,延伸到数据筛选中来,Pandas 则可以凭借正则表达式对数据进行随心所欲、妙不可言的筛选操作,那么究竟妙在哪里呢?下面我们一起来学习。

本教程基于 pandas 1.5.3 版本书写

本文中所有 Python 代码均在集成开发环境 Visual Studio Code (VScode) 中使用交互式开发环境 Jupyter Notebook 中编写,本文分享的代码请使用 VScode 打开。

点给原文链接即可查看如何获取本文所有演示代码以及演示用的数据:

Python 教学 | Pandas 妙不可言的条件数据筛选

演示数据为 A 股上市公司部分信息(18 个字段,统计时间为 2023年5月12日)

Part 2  Excel 的数据筛选与分布统计

在 Excel / WPS 等办公软件中,最基本的数据筛选主要以单元格的内容为主,以 WPS 为例,选中一列内容后,点击右上方【筛选】,再点击字段名右下方按钮就会弹出按值筛选的筛选框,如下图所示。

pandas 条件筛选,Python教学,python,pandas,开发语言

这种以字段内容作为条件的数据筛选是最基本、常用的一种,在点击【筛选】后,WPS 会立即对当前字段的所有内容做一个分布统计,显示每一种取值的数量和百分比,因此大家也习惯使用筛选的功能来做字段值的分布统计,说到这里就不得不介绍一下 Pandas 中的字段值统计操作了,下面是读取数据并统计上市地点字段值分布的代码。

读取并展示部分数据:

# 导入 pandas
import pandas as pd
# 读取演示数据
data = pd.read_excel('./A股上市公司部分信息(截至2023.5.12).xlsx')
# 处理字段名,做简化处理
data.columns = [COL.split('\n')[0] for COL in list(data.columns)]
# 展示数据前两行
data.head(2)

pandas 条件筛选,Python教学,python,pandas,开发语言

字段取值数量统计:统计上市地点字段中值的分布

# 数量统计
data['上市地点'].value_counts()
# 所得结果如下图,A股上市公司上市地点中,值为“深圳”的最多,为 2771

pandas 条件筛选,Python教学,python,pandas,开发语言

字段取值比率统计:统计上市地点字段中值的分布,以比率的形式展现

# 比率统计,在数量统计的基础上加一个参数 normalize=True
data['上市地点'].value_counts(normalize=True)

pandas 条件筛选,Python教学,python,pandas,开发语言

除此之外,如果需要对字段内容进行片段内容查询,还可以在上图所示的筛选框中点击右上方的【文本筛选】进行更细致的筛选。除了查找明确的字符,还可以使用通配符*?进行模糊匹配(*代表任意多个字符,?代表任意单个字符),颇有一些正则表达式的味道。

pandas 条件筛选,Python教学,python,pandas,开发语言

在 Pandas 中,类似的数据筛选同样存在,不仅如此,在模糊查找方面,由于 Pandas 中已经融入了正则表达式,所以在文本数据的筛选中,可以利用正则表达式进行更加自由、细致的筛选操作,除此之外,Pandas 还可以从更多的维度来进行筛选,下面我们一起来学习。

在 Pandas 中,类似的数据筛选同样存在,不仅如此,在模糊查找方面,由于 Pandas 中已经融入了正则表达式,所以在文本数据的筛选中,可以利用正则表达式进行更加自由、细致的筛选操作,除此之外,Pandas 还可以从更多的维度来进行筛选,下面我们一起来学习。

本文拿 Excel / WPS 与 Pandas 做了数据筛选方面的简单对比,本意不是踩一捧一,而是说明不同工具的差异。如果大家能在这里学到 Excel / WPS 的实用操作,这当然也是一件好事。

Part 3  Pandas 条件数据筛选

在上一期介绍数据选取文章中,我们介绍了使用loc函数进行简单条件筛选的功能。实际上除了loc函数,Pandas 中还有几个可以用来数据筛选的函数或形式,比如query函数、切片([])等。在这些函数中,笔者认为通用性最佳的方式是使用切片([])来做数据筛选。切片筛选的形式如下。

变量名[<条件表达式>]

如何使用切片来做数据筛选呢?下面我们以上一节读取的数据data为例,从不同的维度的筛选条件做介绍。

1、条件数据筛选的不同维度

(1) 比较数据值

一种最简单,但又最常见的数据筛选条件就是通过判断一个字段的值是否等于、不等于指定的值。例如当我们想筛选上市地点在北京的A股上市公司数据,可以使用下面的筛选代码。

# 筛选上市地点在北京的A股上市公司数据
data[data['上市地点'] == '北京']

代码中的data['上市地点'] == '北京'就是筛选的条件,筛选结果(部分)如下图所示。

pandas 条件筛选,Python教学,python,pandas,开发语言

如果想获取data中不是在北京上市的企业,那么筛选条件就是上市地点不等于“北京”,编写代码时只需将上述代码中的等于号==改成不等于号!=即可,这里不再具体演示。

当情况比较多的时候,例如筛选出城市字段是北京市、上海市、广州市、深圳市其中一种的数据时,可以使用的方法不止一种,下面是其中一种方法的代码。

# 筛选出城市字段是北京市、上海市、广州市、深圳市其中一种的数据
data[data['城市'].isin(['北京市', '上海市', '广州市', '深圳市'])]

pandas 条件筛选,Python教学,python,pandas,开发语言

上面两个案例是根据内容为文本的字段进行筛选,如果需要对一个数字字段做筛选,我们还可以使用 Python 中的其他比较运算符来做筛选,举个例子,当需要筛选员工总数大于等于 10000 的A股上市企业时,可以使用下面的代码。

# 筛选员工总数大于等于 10000 的企业
data[data['员工总数'] >= 10000]

pandas 条件筛选,Python教学,python,pandas,开发语言

同理,还可以使用大于、小于、小于等于等比较运算符来做数据筛选。这些比较数据值大小的筛选条件中,除了能拿字段和常量做比较,还可以拿字段和字段作比较,例如我们可以筛选出员工总数大于等于所属行政区划代码的数据(当然这个条件没有任何实际意义,这里只是举一个例子),可以使用下面的代码。

# 先将 所属行政区划代码 字段类型转为数字型
data['所属行政区划代码'] = data['所属行政区划代码'].astype(int)
# 筛选出员工总数大于等于所属行政区划代码的数据
data[data['员工总数'] >= data['所属行政区划代码']]

pandas 条件筛选,Python教学,python,pandas,开发语言

(2) 是否为空值

有些时候,我们需要根据某个字段的值是否为空值来做筛选,比如筛选数据data所属上市标准字段值不为空的数据,可以使用下面的代码。

# 筛选所属上市标准字段值不为空的数据
data[data['所属上市标准'].notna()]

pandas 条件筛选,Python教学,python,pandas,开发语言

如果需要获取某字段值为空的数据,可以将上述代码中的notna()替换为isna()即可。

Python 中默认的空值是 None,在 Pandas 中,表格数据中默认的空值(或者说缺失值)是 NaN,它是 numpy 库中的常量,意为 Not a Number,由于 Pandas 是以 numpy 库为基础开发的,故在表格数据中保留此设定,将空值设置为 NaN(numpy.nan)。而isna()notna() 函数能够识别的空值也包括 None 和 NaN,但不包括空字符'',即空字符''在 pandas 中不属于空值。

(3) 文本内容筛选

正如介绍 Excel / WPS 时说的那样,这类办公软件可以对某个字段做文本筛选,筛选字段中包含、不包含、开头(不)是、结尾(不)是某关键词的数据,除此之外还可使使用一些通配符来做模糊筛选。这种筛选操作在  Excel 中已经很强大了,但是这些在拥有正则表达式加持的 Pandas 面前,都算是小菜一碟。下面我们来介绍一下 Pandas 如何根据字段中的文本内容进行筛选数据。

首先,最简单的条件就是字段中是否包含(或不包含)某关键词,例如筛选数据data公司中文名称字段含有关键词“证券”的企业,可以使用下面的数据筛选代码。

# 筛选数据中 公司中文名称 字段含有关键词“证券”的企业
data[data['公司中文名称'].str.contains('证券')]
# 筛选后得到 41 条符合条件的数据

pandas 条件筛选,Python教学,python,pandas,开发语言

如果希望筛选出所有公司中文名称不含关键词“证券”的数据,则可以在上面代码的条件表达式最前面加一个波浪符~,代码如下(不再展示筛选结果)。

# 筛选数据中 公司中文名称 字段不含关键词“证券”的企业
data[~data['公司中文名称'].str.contains('证券')]

除了以上这种最基本的关键词筛选之外,其他的像 Excel 那种根据文本的开头或结尾进行筛选的操作,在 Pandas 都可以通过正则表达式来实现,那么如何在 Pandas 的数据筛选中使用正则表达式呢?很简单,以上述代码为例,只需要将正则表达式传入contains函数,取代关键词即可。例如筛选公司中文名称段中含有“证券”,“银行”或“保险” 的数据时,就可以使用正则表达式进行处理,代码如下。

正则表达式教程已经更新完毕,请到文末查找相关链接

# 筛选公司中文名称字段中含有“证券”,“银行”或“保险” 的数据
data[data['公司中文名称'].str.contains('证券|银行|保险')]

pandas 条件筛选,Python教学,python,pandas,开发语言

除此之外,我们还可以使用更加复杂的正则表达式进行更加复杂的筛选操作,例如筛选注册地址字段中不含有中文的数据可以使用下面的代码来实现。

# 筛选 注册地址 字段中不含有中文的数据
data[~data['注册地址'].str.contains('[\u4e00-\u9fa5]')]

pandas 条件筛选,Python教学,python,pandas,开发语言

根据文本内容做筛选时,有一点需要特别注意,那就是进行筛选的字段中,必须所有值都是字符类型,不能是空值(若含有空值,可先填充缺失值为字符型),不能包含数字型和日期型,因为正则表达式无法对这些类型做处理。

(4) 数据值长度

有时候字段中文本的长度也能反映出一些信息,例如注册地址中字符数量越多,说明地址的描述越详细,而Pandas 则可以根据字符的长度做筛选,例如当需要筛选注册地址字段中字符数量小于等于 10 的所有数据时,可以使用下面的代码。

# 筛选注册地址字段中字符数量小于等于 10 的所有数据
data[data['注册地址'].str.len() < 10]

pandas 条件筛选,Python教学,python,pandas,开发语言

(5) 日期筛选

除了对数值和字符进行筛选,Pandas 也能像 Excel 那样根据日期筛选数据,例如筛选 2023 年新上市的A股企业,就可以使用下面的代码。

# 先将 上市日期 字段转为 python 中的日期类型
data['上市日期'] = data['上市日期'].astype('datetime64[ns]')
# 筛选 2023 年新上市的A股企业
data[data['上市日期'] >= pd.Timestamp(2023, 1, 1)]

pandas 条件筛选,Python教学,python,pandas,开发语言

(6) 其他

除了以上介绍的数据筛选维度,Pandas 的数据筛选还可以有其他的维度,比如根据索引值、字段名筛选,不过这些知识点的实用性算不上高,这就不过多介绍了。

2、复合条件筛选

大家可能已经注意到,上文介绍的数据筛选虽然维度不同,但是所有的筛选案例中都只有一个筛选条件。实际上 Pandas 的数据筛选是可以存在多个筛选条件(两个及两个以上)的。当存在多个条件时,每个条件最好都使用括号括起来,如果其中两个条件时是“或”关系,那么使用逻辑或符号|来连接它们;如果两个条件的关系是“与”关系,那么就要用逻辑与符号&来连接它们。在 Pandas 中,上文中介绍的所有条件形式都可以进行任意的排列组合。下面我们通过几个例子来了解如何进行复合条件筛选。

【例 1】筛选出A股上市公司数据中,所属行政区划位于“江浙沪”,且员工总数大于等于 20000 的数据。

## 【例 1】筛选出A股上市公司数据中,所属行政区划位于“江浙沪”,且员工总数大于等于 20000 的数据。
# 为了方便查看,在代码中加了几个不必要的空格
data[ (data['所属行政区划'].isin(['上海', '江苏省', '浙江省'])) & (data['员工总数'] >= 20000) ]

pandas 条件筛选,Python教学,python,pandas,开发语言

【例 2】筛选出企业规模为大型,或注册资本大于等于 10 亿的企业数据。

## 【例 2】筛选出企业规模为大型,或注册资本大于等于 10 亿的企业数据。
data[(data['企业规模']=='大型') | (data['注册资本'] > 1000000000)]

pandas 条件筛选,Python教学,python,pandas,开发语言

以上就是 Pandas 条件数据筛选的内容。

Part 4  总结

与 Excel / WPS 等办公软件一样,Pandas 也具备多种形式的条件筛选。不仅如此,得益于正则表达式强大的文本处理力量,Pandas 在筛选功能方面要更加强大,对大数据集的支持也要更好。相对而言 Excel / WPS 这些工具在小型数据集的处理上要方便一些,总之它们各有长处。条件数据筛选是数据处理、数据分析中的重要一步,希望大家学习路上一帆风顺,下期文章我们将继续学习 Pandas 数据处理相关知识。

Part 5  Python教程

  • 学习 Python 第一步——环境安装与配置

  • Python 基本数据类型

  • Python 字符串操作(上)

  • Python 字符串操作(下)

  • Python 变量与基本运算

  • 组合数据类型-列表

  • 组合数据类型-集合(内含实例)

  • 组合数据类型 - 字典&元组

  • Python 中的分支结构(判断语句)

  • Python 中的循环结构(上)

  • Python 中的循环结构(下)

  • Python教学 | Python函数的定义与调用

  • Python教学 | Python 内置函数

  • Python教学 | 最常用的标准库之一 —— os

  • Python 教学 | “小白”友好型正则表达式教学(一)

  • Python 教学 | “小白”友好型正则表达式教学(二)

  • Python 教学 | “小白”友好型正则表达式教学(三)

  • Python 教学 | 数据处理必备工具之 Pandas(基础篇)

  • Python 教学 | 数据处理必备工具之 Pandas(数据的读取与导出)

  • Python 教学 | Pandas 数据索引与数据选取

  • 本期文章来源地址https://www.toymoban.com/news/detail-686139.html

到了这里,关于Python 教学 | Pandas 妙不可言的条件数据筛选的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 借助Numpy,优化Pandas的条件检索代码

    借助Numpy,优化Pandas的条件检索代码

    Numpy 其实是最早的处理数据的 Python 库,它的核心 ndarray 对象,是一个高效的n维数组结构。 通过这个库,可以高效的完成向量和矩阵运算,由于其出色的性能,很多其他的数据分析,科学计算或者机器学习相关的 Python 库都或多或少的依赖于它。 Pandas 就是其中之一, Pandas

    2024年03月21日
    浏览(11)
  • 如何在Pandas中根据条件替换列中的值?

    在使用Pandas的Python中,DataFrame列中的值可以通过使用各种内置函数根据条件进行替换。在本文中,我们将讨论在Pandas中用条件替换数据集列中的值的各种方法。 1. 使用dataframe.loc方法 使用此方法,我们可以使用条件或布尔数组访问一组行或列。如果我们可以访问它,我们也可

    2024年01月16日
    浏览(7)
  • pandas中根据两列 或 多列进行条件对比,生成新列【三种方法】

    两列数量对比,收货比期望多,就是标记数量满足,否则就数量不满足 如果数量满足、日期满足,那么总体就标记满足,有一个不满足就总体标记不满足

    2024年02月14日
    浏览(11)
  • websockets,一个不可思议的 Python 库!

    websockets,一个不可思议的 Python 库!

    📚 个人网站:ipengtao.com 大家好,今天为大家分享一个不可思议的 Python 库 - websockets。 Github地址:https://github.com/python-websockets/websockets WebSocket是一种在现代Web开发中变得越来越重要的协议。它允许客户端和服务器之间建立持久的双向通信,使得实时应用程序(如在线聊天、实

    2024年02月01日
    浏览(7)
  • 【Python项目实战】京东自动抢茅台脚本,此项目不可商用,仅为Python练手使用!

    【Python项目实战】京东自动抢茅台脚本,此项目不可商用,仅为Python练手使用!

    目前,在多家电商平台都可以抢购茅台酒,包括天猫超市、京东、天猫会员店、国美、苏宁、网易严选等渠道,消费者使用一台手机便可参与抢购,不过,很多消费者依旧不清楚用手机抢茅台怎么抢,因为抢购的人实在太多,需要有技巧才能提高成功抢购的概率。 今天给大家

    2024年02月13日
    浏览(7)
  • 可远观而不可亵玩焉:Python 中的自由变量

    项目 描述 搜索引擎 Google 、Bing Python 官方文档 哔哩哔哩 【python】定义好的变量读不出来?详解全局变量和自由变量的使用! 项目 描述 PyCharm 2023.1 (Professional Edition) Python 3.10.6 全局变量 在 Python 中,全局变量是在程序的 顶层(顶层是指程序中最外层的作用域或命名空间,即

    2024年02月06日
    浏览(11)
  • 【头歌】——数据分析与实践-python-Pandas 初体验-Pandas数据取值与选择-Pandas进阶

    第1关 了解数据处理对象–Series 第2关 了解数据处理对象-DataFrame 第3关 读取 CSV 格式数据 第4关 数据的基本操作——排序 第5关 数据的基本操作——删除 第6关 数据的基本操作——算术运算 第7关 数据的基本操作——去重 第8关 数据重塑 第1关 Series数据选择 第2关 DataFrame数据

    2024年01月22日
    浏览(57)
  • python——pandas用法详解

    python——pandas用法详解

    目录 一、pandas简介 1.1 pandas来源 1.2 pandas特点 1.3 pandas的两种主要数据结构 二、 pandas数据结构详解 2.1 pandas——series 2.1.1 由字典创建一个series 2.1.2 由ndarray创建Series 2.1.3 由标量创建Series 2.1.4 Series特性 2.1.4.1 类ndarray 2.1.4.2 类dict(字典) 2.1.4.3 向量化操作(广播)和标签对齐 2.1

    2024年02月09日
    浏览(7)
  • Python安装Pandas库

    Python安装Pandas库

    方法一:cmd命令行执行pip install pandas 1.Windows+R,输入cmd打开命令行窗口,输入pip install pandas。 如下图所示 2.若出现下图所示的告警,说明版本有冲突。 按照提示输入pip install --upgrade pip,对pip进行升级 3.若出现下图所示的升级报错,输入python -m ensurepip,python -m pip install --up

    2024年02月03日
    浏览(8)
  • 头歌实践教学平台Python-列表类型翻转教学

    第1关 输入数据创建列表 第2关 计算每位选手的成绩 第3关 去除一个最高分和一个最低分 第4关 计算中位数成绩 第5关 去除弃权评委成绩 第6关 将平均成绩附加到列表末尾 第7关 读文件到二维列表 第8关 二维列表数据分析 第9关 成绩排序

    2024年04月26日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包