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

Part1前言

在 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 打开。

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

Part2Excel 的数据筛选与分布统计

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

这种以字段内容作为条件的数据筛选是最基本、常用的一种,在点击【筛选】后,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)

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

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

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

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

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

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

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

Part3Pandas 条件数据筛选

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

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

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

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

(1) 比较数据值

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

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

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

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

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

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

在这里插入图片描述

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

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

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

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

(2) 是否为空值

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

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

如果需要获取某字段值为空的数据,可以将上述代码中的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 条符合条件的数据

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

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

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

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

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

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

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

(4) 数据值长度

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

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

(5) 日期筛选

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

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

(6) 其他

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

2复合条件筛选

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

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

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

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

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

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

Part4总结

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

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

若有侵权,请联系删除

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python pandas可以使用多个条件筛选数据。可以使用逻辑运算符(如and、or、not)来组合多个条件。例如,可以使用以下代码来筛选出满足多个条件数据: ```python import pandas as pd # 创建一个DataFrame df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e'], 'C': [10, 20, 30, 40, 50]}) # 筛选出A列大于2且C列小于40的数据 result = df[(df['A'] > 2) & (df['C'] < 40)] print(result) ``` 输出结果为: ``` A B C 2 3 c 30 ``` 在上面的代码中,使用了&符号来表示and运算符,同时使用了圆括号来分组条件。可以根据实际需求来组合多个条件。 ### 回答2: Python Pandas是一个操作表格数据的工具包,其底层是基于NumPy的。可以方便地读取、处理和写入各种格式的表格数据,如 CSV、Excel、SQL数据库和HDF5等。Pandas中的数据框(DataFrame)类似于Excel表格,可以进行多条件筛选来得到我们想要的数据。 在Pandas中使用多个条件进行筛选的方法,是通过使用逻辑运算符(&和|)和布尔值索引进行的。 布尔值索引(Boolean Indexing)简单来说,就是通过某个条件筛选数据,生成一个对应索引上为True或False的布尔序列,然后用这个序列对原数据进行过滤和切片。 下面是一个示例代码,展示了如何使用多个条件进行数据筛选: ```python import pandas as pd # 读取数据 df = pd.read_csv('data.csv') # 多条件筛选 df_selected = df[(df['age'] >= 18) & (df['gender'] == 'male') & (df['salary'] > 5000)] # 输出结果 print(df_selected) ``` 上述示例代码中,首先我们使用Pandas读取了一个名为data.csv的CSV文件中的数据,然后使用布尔值索引选出了满足条件数据,并将结果输出。 在这个示例中,我们使用了三个条件: - age(年龄)大于等于18岁 - gender(性别)为男性 - salary(薪资)大于5000元 我们使用了逻辑运算符&和()来对这多个条件进行组合。&代表逻辑与,在Python中的优先级比|高。()则用来改变运算的优先级,以保证条件的组合按我们期望的优先级进行。 除了逻辑运算符外,Pandas还提供了其他常见的运算符,如等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)等。使用这些运算符,我们可以更灵活地进行多条件筛选。 总之,通过使用Pandas提供的布尔值索引和逻辑运算符,我们可以轻松地进行多个条件筛选,从而得到我们想要的数据。 ### 回答3: PandasPython语言中的一个数据分析库,具有广泛的应用范围。筛选数据分析的核心任务之一,而Pandas提供了丰富的筛选功能来帮助分析人员快速有效地获取需要的数据。在Pandas中可以使用多种方式进行数据筛选,其中包括多条件筛选。下面我们来详细了解一下Python Pandas条件筛选的方法。 第一步,处理数据 首先需要导入Pandas库并获取原始数据,在此之前需要确保数据文件已经导入到Python环境中。如果需要使用多条件筛选,首先需要对数据进行预处理。数据预处理包括去除空值、转换数据类型等操作,确保数据的一致性和完整性,方便后续的操作。 第二步,使用逻辑运算符 在多条件筛选中,我们需要使用逻辑运算符and、or、not等来连接多个筛选条件。and表示与,or表示或,not表示非。可以使用下面的语句来做出筛选: df[(df['a'] > 1) & (df['b'] < 2)] 上述语句表示符合a大于1且b小于2的数据数据将从数据框df中筛选出来。 第三步,使用isIn方法 Pandas提供了isin方法,可以用来匹配多个值。在多条件中,我们可以使用isin方法来实现或运算。具体方法如下: df[df['a'].isin(['value1', 'value2'])] 上述语句表示a列中取值是value1或value2的数据,将从数据框df中筛选出来。 第四步,使用query方法 query方法是Pandas中一个比较强大的筛选方式,可以一次性完成多个筛选条件的处理。具体用法如下: df.query('a > 1 and b < 2') 上述语句表示符合a大于1且b小于2的数据,将从数据框df中筛选出来。 多条件筛选数据分析中的重要环节之一,Pandas为我们提供了简单易用的多条件筛选方法,可以帮助我们更快更准确地获取需要的数据。上述方法都可以在Pandas中轻松地实现,读者可以根据自己的需要进行选择和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值