0

0

Pandas DataFrame根据特定列值进行数据筛选与截取

聖光之護

聖光之護

发布时间:2025-11-12 12:58:19

|

470人浏览过

|

来源于php中文网

原创

Pandas DataFrame根据特定列值进行数据筛选与截取

本文详细介绍了如何在pandas dataframe中根据特定列的数值条件进行数据筛选和截取。我们将探讨多种高效方法,包括布尔索引、`df.loc`以及`df.query()`,并通过实例代码演示如何精确地获取所需的数据子集,这对于数据分析和可视化中的数据预处理至关重要。

引言:DataFrame数据筛选的需求

在数据分析和处理中,我们经常需要从大型DataFrame中提取满足特定条件的数据子集。例如,在一个实验数据集中,我们可能只关心某个时间点之前的所有数据,或者某个特定数值范围内的数据。本教程将指导您如何使用Pandas提供的强大功能,根据DataFrame中某一列的数值来“切割”或筛选数据。

用户在尝试通过df.loc[df['ElapsedTime'] == 100]来获取前100秒的数据时,遇到了问题。这种方法的问题在于它只会选择ElapsedTime列值精确等于100的行。如果目标是获取ElapsedTime小于或等于100的所有数据,这种精确匹配的方式将无法达到目的,甚至可能返回一个空DataFrame,如果数据中没有精确为100的行,或者导致维度不匹配的错误(例如在绘图时)。正确的做法是使用条件运算符(如

方法一:布尔索引(Boolean Indexing)

布尔索引是Pandas中最常用且直观的数据筛选方法之一。它通过创建一个布尔序列(True/False)来选择DataFrame中的行。

基本语法:

df[df['列名'] 运算符 值]

示例: 假设我们有一个包含实验数据的DataFrame df,其中有一列名为 ElapsedTime 表示经过的时间。我们想获取 ElapsedTime 小于或等于 100 的所有数据。

import pandas as pd
import numpy as np

# 创建一个示例DataFrame
data = {
    'ElapsedTime': np.arange(0, 501, 0.5), # 从0到500,步长0.5
    'MeasurementA': np.random.rand(1001),
    'MeasurementB': np.random.rand(1001) * 10
}
df = pd.DataFrame(data)

print("原始DataFrame前5行:")
print(df.head())
print("\n原始DataFrame后5行:")
print(df.tail())

# 使用布尔索引筛选 ElapsedTime <= 100 的数据
df_filtered_boolean = df[df['ElapsedTime'] <= 100]

print("\n筛选后DataFrame(布尔索引)前5行:")
print(df_filtered_boolean.head())
print("\n筛选后DataFrame(布尔索引)后5行:")
print(df_filtered_boolean.tail())
print(f"筛选后DataFrame的行数: {len(df_filtered_boolean)}")

解释:df['ElapsedTime']

方法二:使用 df.loc 进行布尔索引

df.loc 是Pandas中基于标签(行标签和列标签)进行选择的强大工具。当与布尔索引结合使用时,它能更明确地表达我们的意图,即选择满足特定条件的行。

基本语法:

df.loc[df['列名'] 运算符 值, :] # 或省略第二部分,默认为所有列

示例:

微信 WeLM
微信 WeLM

WeLM不是一个直接的对话机器人,而是一个补全用户输入信息的生成模型。

下载
# 使用 df.loc 筛选 ElapsedTime <= 100 的数据
df_filtered_loc = df.loc[df['ElapsedTime'] <= 100]

print("\n筛选后DataFrame(df.loc)前5行:")
print(df_filtered_loc.head())
print("\n筛选后DataFrame(df.loc)后5行:")
print(df_filtered_loc.tail())
print(f"筛选后DataFrame的行数: {len(df_filtered_loc)}")

解释:df.loc 的第一个参数是行选择器,第二个参数是列选择器。在这里,我们用 df['ElapsedTime']

方法三:使用 df.query()

df.query() 方法提供了一种通过字符串表达式进行数据筛选的简洁方式,尤其适用于复杂的查询条件。它的语法更接近SQL,对于习惯SQL的用户来说可能更易读。

基本语法:

df.query('列名 运算符 值')

示例:

# 使用 df.query() 筛选 ElapsedTime <= 100 的数据
df_filtered_query = df.query('ElapsedTime <= 100')

print("\n筛选后DataFrame(df.query())前5行:")
print(df_filtered_query.head())
print("\n筛选后DataFrame(df.query())后5行:")
print(df_filtered_query.tail())
print(f"筛选后DataFrame的行数: {len(df_filtered_query)}")

解释:df.query() 接受一个字符串作为参数,该字符串定义了筛选条件。Pandas会在DataFrame的命名空间中解析这个字符串,并执行相应的筛选。对于简单的条件,它可能不如布尔索引直接,但对于涉及多个列、逻辑运算符(and, or, not)或外部变量的复杂条件,query() 的可读性通常更高。

进阶筛选条件

除了简单的“小于或等于”,您还可以使用其他比较运算符和逻辑运算符来构建更复杂的筛选条件:

  • 大于 (>): df[df['ElapsedTime'] > 100]
  • 大于或等于 (>=): df[df['ElapsedTime'] >= 100]
  • 小于 ( df[df['ElapsedTime']
  • 不等于 (!=): df[df['MeasurementA'] != 0.5]
  • 等于 (==): df[df['ElapsedTime'] == 100] (仅当您确实需要精确匹配时使用)
  • 逻辑与 (&): df[(df['ElapsedTime'] > 50) & (df['ElapsedTime']
  • 逻辑或 (|): df[(df['ElapsedTime'] 490)]
  • 是否在列表中 (.isin()): df[df['CategoricalColumn'].isin(['CategoryA', 'CategoryB'])]
  • 范围筛选 (.between()): df[df['ElapsedTime'].between(50, 100)]

注意事项与最佳实践

  1. 返回新DataFrame: 上述所有筛选方法都会返回一个新的DataFrame,而不是在原始DataFrame上进行修改。如果您想修改原始DataFrame,需要进行赋值操作(例如 df = df[df['ElapsedTime']
  2. 性能考量: 对于非常大的DataFrame,布尔索引通常比 df.query() 略快,因为它避免了字符串解析的开销。然而,对于大多数日常使用场景,性能差异可以忽略不计。
  3. 链式操作: 避免在单行中进行过多的链式操作,因为这可能导致“SettingWithCopyWarning”。通常,最好将筛选结果赋值给一个新变量,或者使用 df.loc 进行明确的赋值。
  4. 处理缺失值: 如果筛选列中包含 NaN(缺失值),它们在布尔比较中通常会被视为 False。如果您需要特殊处理缺失值,可以先使用 df['列名'].notna() 或 df['列名'].isna() 进行筛选。

总结

本教程详细介绍了在Pandas DataFrame中根据特定列的数值条件进行数据筛选和截取的三种主要方法:布尔索引、df.loc结合布尔索引以及df.query()。每种方法都有其适用场景和优缺点,但它们都能高效地帮助您从数据集中提取所需的信息。掌握这些技巧是进行有效数据分析和预处理的基础。在实际应用中,根据您的偏好、查询的复杂性和代码的可读性需求,选择最适合您的方法。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

678

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

675

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

572

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

414

2024.04.29

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.7万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号