Python Pandas数据处理利器query方法解析

server/2024/10/18 8:30:28/

大家好,在数据分析中,数据过滤是常见且重要的操作。Pandas库提供了多种方法来筛选数据,其中 query 方法因其简洁和强大的表达能力受到广泛欢迎。本文将详细介绍Pandas query 方法的高级应用,助力大家在复杂数据过滤时更加得心应手。

1.Pandas的query方法

Pandas的 query 方法允许你使用类似SQL的语法对DataFrame进行数据筛选。与传统的布尔索引相比,query 方法的语法更加简洁明了,特别是在处理复杂条件时更具可读性。

首先看一个简单的示例,使用 query 方法筛选数据。

python">import pandas as pd# 创建一个数据框
data = {'城市': ['北京', '上海', '广州', '深圳', '成都'],'人口': [2154, 2424, 1530, 1340, 1630],'GDP': [36102, 38155, 25000, 26000, 21000]}df = pd.DataFrame(data)# 使用query方法筛选GDP大于30000的城市
filtered_df = df.query('GDP > 30000')print(filtered_df)

运行以上代码,输出结果:

python">   城市    人口    GDP
0  北京  2154  36102
1  上海  2424  38155

这个示例使用 query 方法筛选出了GDP大于30000的城市,代码非常简洁。

2.query方法的高级应用

query 方法不仅可以用于简单的条件筛选,还可以在复杂的数据过滤场景中展现其强大功能。

2.1 多条件筛选

query 方法允许在筛选条件中使用逻辑运算符,如 andor 来实现多条件的联合筛选。

python">import pandas as pd# 创建一个数据框
data = {'城市': ['北京', '上海', '广州', '深圳', '成都'],'人口': [2154, 2424, 1530, 1340, 1630],'GDP': [36102, 38155, 25000, 26000, 21000]}df = pd.DataFrame(data)# 使用query方法筛选人口大于2000且GDP大于30000的城市
filtered_df = df.query('人口 > 2000 and GDP > 30000')print(filtered_df)

运行以上代码,输出结果:

python">   城市    人口    GDP
0  北京  2154  36102
1  上海  2424  38155

这个示例结合使用and运算符,筛选出了人口大于2000且GDP大于30000的城市。

2.2 变量传递

在某些情况下,筛选条件可能依赖于外部变量的值。query 方法支持通过 @ 符号将Python变量传递到查询字符串中。

python">import pandas as pd# 创建一个数据框
data = {'城市': ['北京', '上海', '广州', '深圳', '成都'],'人口': [2154, 2424, 1530, 1340, 1630],'GDP': [36102, 38155, 25000, 26000, 21000]}df = pd.DataFrame(data)# 外部变量
pop_threshold = 1500
gdp_threshold = 25000# 使用query方法传递变量进行筛选
filtered_df = df.query('人口 > @pop_threshold and GDP > @gdp_threshold')print(filtered_df)

运行以上代码,输出结果:

python">   城市    人口    GDP
0  北京  2154  36102
1  上海  2424  38155
2  深圳  1340  26000

这个示例将外部的 pop_thresholdgdp_threshold 变量传递给 query 方法,从而实现了动态筛选。

2.3 字符串操作

query 方法也支持对字符串列进行过滤操作,结合字符串函数可以实现更复杂的查询需求。

python">import pandas as pd# 创建一个数据框
data = {'城市': ['北京', '上海', '广州', '深圳', '成都'],'人口': [2154, 2424, 1530, 1340, 1630],'GDP': [36102, 38155, 25000, 26000, 21000]}df = pd.DataFrame(data)# 使用query方法筛选以'北'开头的城市
filtered_df = df.query('城市.str.startswith("北")')print(filtered_df)

运行以上代码,输出结果:

python">   城市    人口    GDP
0  北京  2154  36102

这个示例使用 str.startswith() 函数结合 query 方法,筛选出了以“北”字开头的城市。

2.4 布尔索引与query结合

query 方法可以与布尔索引相结合,以实现更灵活的数据过滤。可以使用布尔列来标识数据是否符合某个条件,然后结合 query 进行筛选。

python">import pandas as pd# 创建一个数据框
data = {'城市': ['北京', '上海', '广州', '深圳', '成都'],'人口': [2154, 2424, 1530, 1340, 1630],'GDP': [36102, 38155, 25000, 26000, 21000],'是否一线城市': [True, True, False, True, False]}df = pd.DataFrame(data)# 使用query方法筛选一线城市
filtered_df = df.query('是否一线城市')print(filtered_df)

运行以上代码,输出结果:

   城市    人口    GDP  是否一线城市
0  北京  2154  36102     True
1  上海  2424  38155     True
3  深圳  1340  26000     True

这个示例结合布尔列是否一线城市,使用 query 方法筛选出了所有的一线城市。

2.5 处理缺失值

query 方法还可以与 isnull()notnull() 等函数结合使用,用于处理缺失值的筛选。

python">import pandas as pd# 创建一个包含缺失值的数据框
data = {'城市': ['北京', '上海', '广州', '深圳', '成都'],'人口': [2154, 2424, None, 1340, 1630],'GDP': [36102, None, 25000, 26000, 21000]}df = pd.DataFrame(data)# 使用query方法筛选出人口和GDP不为缺失值的城市
filtered_df = df.query('人口.notnull() and GDP.notnull()')print(filtered_df)

运行以上代码,输出结果:

python">   城市    人口    GDP
0  北京  2154  36102
3  深圳  1340  26000
4  成都  1630  21000

这个示例使用 query 方法结合 notnull() 函数,筛选出了人口和GDP都不为缺失值的城市。

3.query方法的性能优化

  • 减少复杂性:尽量简化 query 中的逻辑表达式,避免嵌套太多复杂条件。

  • 使用适当的变量:如果筛选条件依赖于外部变量,建议将这些变量预先计算好,再传递给 query,以减少实时计算的开销。

  • 结合其他方法:在某些情况下,可以结合 lociloc 等方法对特定的行或列进行预筛选,然后再使用 query 进行更细致的过滤。

在数据分析中,Python Pandas的query方法为数据过滤提供了简洁而强大的工具。通过query方法,使用类似SQL的语法进行数据筛选,这在处理复杂条件时尤为便利。本文介绍了query方法的多条件筛选、变量传递、字符串操作、与布尔索引结合以及缺失值处理等高级应用。掌握这些技巧,可以在日常数据分析中更加高效地过滤和处理数据,同时也能提高代码的可读性和维护性。熟练运用query方法,将使数据分析工作更加灵活和精准。


http://www.ppmy.cn/server/114842.html

相关文章

vim 安装与配置教程(详细教程)

vim就是一个功能非常强大的文本编辑器,可以自己DIY的那种 ,不但可以写代码 ,还可编译 ,可以让你手不离键盘的完成鼠标的所有操作。 如果想要了解vim的的发展历史和详细解说,可以自行上网搜索,我主要是记录一…

创建Hive表后,查看表结构发现中文注释乱码

问题描述: 创建Hive表后,查看表结构发现中文注释乱码 解决方法: 进入mysql,执行如下命令 use hive; #修改表字段注解编码 alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; #修改表注解编码 alter table …

Python 语法糖:让编程更简单(续二)

Python 语法糖:让编程更简单(续) 10. Type hints Type hints 是 Python 中的一种语法糖,用于指定函数或变量的类型。例如: def greet(name: str) -> None:print(f"Hello, {name}!")这段代码将定义一个…

nova Flip的AI技能点拉满,这些趣味且实用的功能你知道几个?

随着科技的蓬勃发展,人工智能已经渗透到我们日常生活的各个领域,“AIGC”“AI大模型”成为时下的热门词汇。手机作为承接AI革新技术的重要载体,不仅能够大大提升用户的工作效率,也带来了自然、流畅的操作交互体验。 nova Flip…

【mysql】mysql之过滤复制

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

利用R语言进行头条主页内容的自动化下载

对于互联网内容的自动化抓取,R语言提供了强大的工具和库来帮助我们实现这一目标。本文将介绍如何使用R语言进行头条主页内容的自动化下载,包括必要的库安装、代理服务器的配置、HTTP请求的发送、内容的解析和保存。 R语言简介 R语言是一种用于统计计算…

BM3D--Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering

系列文章目录 文章目录 系列文章目录前言稀疏三维变换域协同滤波图像去噪摘要1 引言2 分组和协作过滤A.分组B.按匹配分组C.协同过滤D.基于变换域收缩的协同过滤 3 算法结论 前言 论文地址 如果下载不了可以从 https://download.csdn.net/download/m0_70420861/89708940 获取 …

C语言猜数字小游戏(6)

文章目录 前言一、随机数生成randsrandtime设置随机数的范围 二、猜数字游戏实现总结 前言 掌握了前面所学习的知识,我们可以尝试编写这么一段有趣的代码 今天就来写一个猜数字游戏 游戏要求: 1.电脑自动生成1~100的随机数 2.玩家猜数字,猜数…