Skip to content

Latest commit

 

History

History
186 lines (123 loc) · 5.32 KB

how-to-implement-complex-filters-on-dataframe-columns-with-pandas.md

File metadata and controls

186 lines (123 loc) · 5.32 KB

如何在 DataFrame 列上实现复杂过滤操作

原文:www.kdnuggets.com/how-to-implement-complex-filters-on-dataframe-columns-with-pandas

如何在 DataFrame 列上实现复杂过滤操作

编辑者提供的图片 | Ideogram

让我们学习如何在 Pandas 中执行复杂的过滤操作。


我们的前三大课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。

2. 谷歌数据分析专业证书 - 提升你的数据分析能力

3. 谷歌 IT 支持专业证书 - 支持你的组织 IT


准备工作

在开始之前,我们需要安装 Pandas 包。你可以使用以下代码进行安装:

pip install pandas

安装好包后,让我们深入了解这篇文章。

Pandas DataFrame 复杂过滤

DataFrame 是一个 Pandas 对象,可以存储数据并根据需要进行操作。它特别强大,因为我们可以使用条件、逻辑运算符和 Pandas 函数来过滤数据。

让我们尝试创建一个简单的 DataFrame 对象。

import pandas as pd

df = pd.DataFrame({
    'Name': ['Alice', 'Leah', 'Jessica', 'Kenny', 'Brad'],
    'Age': [50, 27, 22, 30, 40],
    'Salary': [100000, 154000, 120000, 78000, 88000],
    'Occupation': ['Doctor', 'Soldier', 'Doctor', 'Accountant', 'Florist']
})

使用这些示例数据,我们将学习如何进行过滤。首先,我们可以根据特定条件过滤数据。

df[df['Age'] > 30]

输出:

 Name  Age  Salary Occupation
0  Alice   50  100000     Doctor
4   Brad   40   88000    Florist

将条件与 And (&) 运算符结合使用也是可能的。

df[(df['Age'] > 25) & (df['Salary'] < 100000)]
 Name  Age  Salary  Occupation
3  Kenny   30   78000  Accountant
4   Brad   40   88000     Florist

使用条件时,我们也可以将它们与 Or (|) 运算符结合使用。

df[(df['Salary'] < 100000) | (df['Occupation'] == 'Soldier')]

输出:

 Name  Age  Salary  Occupation
1   Leah   27  154000     Soldier
3  Kenny   30   78000  Accountant
4   Brad   40   88000     Florist

还有一些方法可以使用字符串函数来过滤数据。例如,我们可以过滤包含某些值的列。

df[df['Occupation'].str.contains('Sol')]

输出:

 Name  Age  Salary Occupation
1  Leah   27  154000    Soldier

如果你需要根据特定字符串值过滤数据,我们可以使用以下代码。

df[df['Occupation'].isin(['Doctor', 'Florist'])]

输出:

 Name  Age  Salary Occupation
0    Alice   50  100000     Doctor
2  Jessica   22  120000     Doctor
4     Brad   40   88000    Florist

还有一种方法是使用 lambda 函数来过滤数据。

df[df['Name'].apply(lambda x: len(x) > 5)]

输出:

 Name  Age  Salary Occupation
2  Jessica   22  120000     Doctor

如果你想简化,我们可以使用查询方法进行数据过滤。

df.query('Age  100000')

输出:

 Name  Age  Salary Occupation
1     Leah   27  154000    Soldier
2  Jessica   22  120000     Doctor

最后,我们可以像这样结合我们之前学到的任何过滤条件。

df[(df['Age'] > 30) & (
                 (df['Salary'] > 60000) | 
                 (df['Occupation'].str.contains('Doc')))]

输出:

 Name  Age  Salary Occupation
0  Alice   50  100000     Doctor
4   Brad   40   88000    Florist

掌握过滤函数以改进你的数据分析过程。

额外资源

Cornellius Yudha Wijaya 是数据科学助理经理和数据撰写者。他在全职工作于 Allianz Indonesia 的同时,喜欢通过社交媒体和写作媒体分享 Python 和数据技巧。Cornellius 撰写了各种人工智能和机器学习主题的文章。

了解更多相关内容