Pandas DataFrame中基于列值选择行的方法

Pandas DataFrame中基于列值选择行的方法

在本文中,我们将介绍如何使用 Pandas DataFrame 中的方法根据列的值来选择行。

阅读更多:Pandas 教程

基本选择方法

1. 使用 Boolean 索引

使用一个 DataFrame 列的值来过滤另一个 DataFrame 中的行是一种非常常见的需求。Pandas 提供了许多方法来实现此操作,最基本和直接的方法是使用 Boolean 索引。

例如,假设我们有以下 DataFrame:

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 32, 18, 47],
    'city': ['New York', 'Seattle', 'Chicago', 'Atlanta']
})

我们可以创建一个 Boolean Series 来表示每行是否应该被选择,例如,我们只希望选择那些居住在 ‘Chicago’ 和 ‘Atlanta’ 的人,我们可以使用以下代码:

mask = (df['city'] == 'Chicago') | (df['city'] == 'Atlanta')
selected_rows = df[mask]

在这里,我们使用了逻辑运算符 | 和 () 来组合两个条件。

2. 使用 loc 和 iloc

DataFrame 中提供了两个方法来访问行,即 loc 和 iloc,其中,loc 通过标签选择行,iloc 通过整数位置选择行。

loc 和 iloc 都可以使用 Boolean 数组来过滤 DataFrame。

例如,使用以下方式访问 DataFrame 中的行:

# 使用 iloc
selected_rows = df.iloc[[0, 2], :]

# 使用 loc
selected_rows = df.loc[[0, 2], :]

在这里,我们传递了一个整数索引的列表( [0,2] )来选择第一行和第三行。在 loc 中,我们还传递了一个字符串索引的列表来选择行。

进阶选择方法

1. 使用 query

Pandas 还提供了一个 query 方法,该方法允许我们使用类似 SQL 的语法来过滤 DataFrame。

例如,我们可以选择年龄大于 21 的人:

selected_rows = df.query('age > 21')

在这里,我们使用字符串表示式 ‘age > 21’ 来选择行。

2. 使用 isin

如果我们希望选择某些列值在给定列表中的行,可以使用 isin 方法。这是对长度不等的多个等于条件进行聚合的一种方便的方法。

例如,如果我们要选择所有居住在 ‘Seattle’ 或 ‘Atlanta’ 的人:

selected_rows = df[df['city'].isin(['Seattle', 'Atlanta'])]

3. 使用 where

如果希望保留 DataFrame 的形状,并将不符合条件的行替换为 NaN,则可以使用 where 方法。where 方法需要一个单独的条件,否则返回的 DataFrame 将是与原始 DataFrame 相同的形状。

例如,如果我们希望将所有年龄小于 30 岁的人的行保留,而其他行则将替换为 NaN:

selected_rows = df.where(df['age'] < 30)

4. 使用 query 和 where 的组合

我们还可以使用 query 和 where 的组合来选择行。例如,如果我们希望选择居住在 ‘Seattle’ 或 ‘Atlanta’,但年龄不到 30 岁的人:

import numpy as np

selected_rows = df.query("city in ['Seattle', 'Atlanta']").where(df['age'] < 30).replace(np.nan, '', regex=True)

我们使用 “city in [‘Seattle’, ‘Atlanta’]” 和 “age < 30” 作为查询表达式,并使用 where 将不符合条件的位置替换为 NaN,最后使用 replace 将 NaN 替换为空字符串。

总结

在 Pandas DataFrame 中选择行可能是一项常见的任务,我们可以使用 Boolean 索引、loc/iloc、query、isin、where和它们的组合来完成这个任务。在实际情况中,可能会出现更加复杂的选择条件,但 Pandas 提供了一系列选择方法,使得我们可以更轻松地选择我们需要的行。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程