如何基于条件在 Pandas DataFrame 中过滤数据

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将探讨如何基于特定条件在 Pandas DataFrame 中过滤数据。Pandas 是 Python 中一个强大的数据分析库,对于任何处理结构化数据的 Python 开发者来说,了解如何有效地过滤数据是一项至关重要的技能。我们将介绍 Pandas DataFrame 的基础知识,并深入探讨各种过滤技术,以帮助你提取和分析项目所需的数据。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") python/DataScienceandMachineLearningGroup -.-> python/data_analysis("Data Analysis") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("Data Visualization") subgraph Lab Skills python/data_collections -.-> lab-395062{{"如何基于条件在 Pandas DataFrame 中过滤数据"}} python/data_analysis -.-> lab-395062{{"如何基于条件在 Pandas DataFrame 中过滤数据"}} python/data_visualization -.-> lab-395062{{"如何基于条件在 Pandas DataFrame 中过滤数据"}} end

Pandas DataFrame 简介

Pandas 是一个强大的用于数据处理和分析的开源 Python 库。Pandas 的核心是 DataFrame,它是一种具有行和列的二维带标签数据结构。DataFrame 类似于电子表格或 SQL 表,是数据科学和机器学习中最常用的数据结构之一。

什么是 Pandas DataFrame?

Pandas DataFrame 是一种具有行和列的二维带标签数据结构。DataFrame 中的每一列可以具有不同的数据类型,而行可以表示不同的观测值或数据点。Pandas DataFrame 非常灵活,可用于广泛的数据处理和分析任务,如数据清理、转换和可视化。

导入并创建 Pandas DataFrame

要使用 Pandas,首先需要导入该库。你可以通过运行以下代码来实现:

import pandas as pd

导入 Pandas 后,你可以通过多种方式创建 DataFrame,例如:

  1. 从字典创建:
data = {'Name': ['John', 'Jane', 'Bob', 'Alice'],
        'Age': [25, 30, 35, 40],
        'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
  1. 从 CSV 文件创建:
df = pd.read_csv('data.csv')
  1. 从 SQL 数据库创建:
df = pd.read_sql_table('table_name', engine)

探索 Pandas DataFrame

创建 DataFrame 后,你可以使用各种方法来探索其结构和内容,例如:

  • df.head():显示 DataFrame 的前 5 行。
  • df.tail():显示 DataFrame 的最后 5 行。
  • df.info():显示有关 DataFrame 的信息,包括数据类型和非空值的数量。
  • df.describe():显示 DataFrame 中数值列的摘要统计信息。

了解了 Pandas DataFrame 的基础知识后,现在你可以进入下一部分,该部分将介绍如何基于条件在 Pandas DataFrame 中过滤数据。

在 Pandas DataFrame 中过滤数据

在 Pandas DataFrame 中过滤数据是数据分析和处理中的常见任务。Pandas 提供了多种基于各种条件过滤数据的方法,使你能够从数据集中提取所需的特定信息。

基本过滤

过滤 DataFrame 的最基本方法是使用布尔索引。这涉及创建一个布尔掩码,它是一个与 DataFrame 中的行相对应的 True 和 False 值的 Series。然后,你可以使用此掩码选择满足指定条件的行。

## 示例 DataFrame
data = {'Name': ['John', 'Jane', 'Bob', 'Alice'],
        'Age': [25, 30, 35, 40],
        'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)

## 过滤出年龄大于 30 的行
mask = df['Age'] > 30
filtered_df = df[mask]

多个条件

你还可以通过将布尔表达式与逻辑运算符(如 &(与)、|(或)和 ~(非))组合来使用多个条件过滤 DataFrame。

## 过滤出年龄大于 30 且城市为巴黎的行
mask = (df['Age'] > 30) & (df['City'] == 'Paris')
filtered_df = df[mask]

使用 isin() 进行过滤

当你想基于值列表过滤 DataFrame 时,isin() 方法很有用。

## 过滤出城市为纽约或东京的行
cities = ['New York', 'Tokyo']
mask = df['City'].isin(cities)
filtered_df = df[mask]

使用 query() 进行过滤

Pandas 还提供了 query() 方法,它允许你使用基于字符串的表达式过滤 DataFrame。

## 过滤出年龄大于 30 且城市为巴黎的行
filtered_df = df.query('Age > 30 and City == "Paris"')

通过了解这些各种过滤技术,你可以有效地从 Pandas DataFrame 中提取所需的数据。在下一节中,我们将探索一些更高级的过滤方法。

高级过滤技术

虽然上一节介绍的基本过滤技术功能强大且用途广泛,但 Pandas 还提供了更高级的过滤选项来处理复杂的情况。

使用正则表达式进行过滤

Pandas 允许你使用正则表达式(regex)来过滤 DataFrame。当你需要在字符串数据中匹配模式时,这特别有用。

## 过滤出名字以 'J' 开头的行
mask = df['Name'].str.startswith('J')
filtered_df = df[mask]

使用日期时间进行过滤

在处理日期和时间数据时,你可以根据日期时间条件过滤 DataFrame。

## 带有 'Date' 列的示例 DataFrame
df['Date'] = pd.to_datetime(df['Date'])

## 过滤出日期为 2022 年的行
mask = (df['Date'].dt.year == 2022)
filtered_df = df[mask]

使用 apply() 进行过滤

apply() 方法允许你将一个函数应用于 DataFrame 或 Series 的每个元素,然后使用结果来过滤数据。

## 过滤出名字长度大于 4 的行
mask = df['Name'].apply(len) > 4
filtered_df = df[mask]

链式过滤

你可以将多个过滤器链接在一起以创建复杂的过滤条件。

## 过滤出年龄大于 30 且名字以 'J' 开头的行
mask1 = df['Age'] > 30
mask2 = df['Name'].str.startswith('J')
filtered_df = df[mask1 & mask2]

通过掌握这些高级过滤技术,即使在复杂的情况下,你也可以有效地操作和从 Pandas DataFrame 中提取所需的数据。

总结

在本教程结束时,你将扎实地理解如何使用简单和高级技术在 Pandas DataFrame 中过滤数据。你将能够把这些技能应用到自己的 Python 项目中,从而有效地提取和处理推动业务或研究发展所需的数据。