📌  相关文章
📜  根据条件选择pandas DataFrame中的行(1)

📅  最后修改于: 2023-12-03 15:26:42.095000             🧑  作者: Mango

根据条件选择pandas DataFrame中的行

在数据科学和分析的过程中,处理数据是一个必不可少的环节。Pandas是Python中一个强大的数据处理库,它提供了一种灵活和高效的方法来对数据进行操作和处理,同时也支持多种数据源和数据格式。

在Pandas中选择DataFrame中的特定行是实现数据过滤和分析操作的关键。本文将介绍如何根据条件选择Pandas DataFrame中的行。

导入Pandas和准备数据

首先,导入Pandas包并创建一个示例数据集。示例数据集是一个包含人名、性别、年龄、身高和体重的DataFrame:

import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily', 'Frank', 'Grace', 'Helen', 'Ivy', 'Jack'],
    'Gender': ['F', 'M', 'M', 'M', 'F', 'M', 'F', 'F', 'F', 'M'],
    'Age': [25, 30, 35, 40, 45, 50, 55, 60, 65, 70],
    'Height': [155, 165, 175, 185, 150, 160, 170, 180, 190, 200],
    'Weight': [45, 55, 65, 75, 40, 50, 60, 70, 80, 90]
}

df = pd.DataFrame(data)
筛选单列的特定值

要筛选DataFrame中某列的特定值,可以使用比较运算符(例如“==”、“!=”、“>”、“<”、“>=”、“<=”)和逻辑运算符(例如“&”、“|”、“~”)指定条件,并将它们传递给DataFrame的loc[]函数,如下所示:

# 选择Gender为"M"的行
male = df.loc[df['Gender'] == 'M']

# 选择Height大于170的行
tall = df.loc[df['Height'] > 170]

在上面的代码中,使用“==”运算符筛选Gender列中的值等于“M”的行,并将它们分配给名为male的变量。使用“>”运算符和170筛选Height列中的值大于170的行,并将它们分配给名为tall的变量。

在这两种情况下,选择的条件都使用布尔数组指定,并将其放置在df.loc[]函数中。可以使用.loc[]函数选择Pandas DataFrame中的行(和列),并使用布尔数组作为参数选择行(和列)。

外部筛选多列的特定值

要选取DataFrame的多列的特定值,可以使用相同的技术,只需要指定多个条件。例如:

# 选择Gender为"M",Height大于170的行
male_tall = df.loc[(df['Gender'] == 'M') & (df['Height'] > 170)]

# 选择Gender为"F",Age大于50或Weight不等于60的行
female_middle_aged = df.loc[(df['Gender'] == 'F') & ((df['Age'] > 50) | (df['Weight'] != 60))]

在上述代码中,“&”和“|”运算符用于组合条件。使用圆括号标记不同的条件组,以确保计算顺序正确。

内部筛选多列的特定值

在一些情况下,必须根据DataFrame中的整个行(而不是特定列)进行筛选。在这种情况下,需要将方法应用于整个行,而不仅仅是单个列。例如:

# 选择Gender为"F",且Age大于等于50,且Height大于等于170,且Weight小于等于70的行
female_old_tall_light = df.loc[(df['Gender'] == 'F') & (df[['Age', 'Height', 'Weight']] >= [50, 170, 70]).all(axis=1)]

# 选择Gender为"M",或Age小于等于30的行
young_or_maie = df.loc[(df['Gender'] == 'M') | (df['Age'] <= 30)]

在上面的示例中,使用all()方法将3个条件(至少50岁、至少170厘米身高、不超过70公斤重)应用于Age、Height和Weight列中的所有值。all()方法返回一个布尔值,指示所有条件是否都为True。在将此结果与“&”运算符组合并将其传递给.loc[]函数时,可以选择符合所有条件的行。

在第二个示例中,使用符号“|”(或)指定两个条件,选择满足任一条件的行的组合。

筛选空值/缺失值

当考虑DataFrame中的空值/缺失值时,需要使用“isna()”或“isnull()”方法检查DataFrame中的值是否为空,如下所示:

# 选择Weight列中的空值/缺失值
missing_weight = df.loc[df['Weight'].isna()]

# 选择Height列中的非空值/非缺失值
valid_height = df.loc[~df['Height'].isnull()]

在上面的代码中,“isna()”或“isnull()”方法检查DataFrame中每个元素是否为空值/缺失值,以生成一个布尔值的DataFrame,该DataFrame的所有元素都是True或False。使用符号“~”(波浪号)选取所有False值行。

结论

在本文中,介绍了如何使用多种条件筛选Pandas DataFrame中的行。根据需要,可以使用比较运算符、“&”和“|”运算符、all()和isna()/isnull()方法以及多个条件组合,从DataFrame中选择特定的行。这种灵活的技术可帮助您更有效地处理数据,并提高数据分析和建模的准确性。