Pandas中的布尔索引
在Pandas中,布尔索引是一种强大的方法,它允许我们根据所需条件选择DataFrame中的特定行或列。通过使用逻辑运算符和条件表达式,我们可以很容易地创建一些复杂的筛选条件。
简介
布尔索引是一种筛选数据的方法,它基于“真”或“假”的值来选择DataFrame中的特定行或列。通过使用布尔运算符(例如AND、OR和NOT),我们可以根据多个条件筛选数据。
让我们来看一个示例。假设我们有以下数据:
import pandas as pd
data = {'name': ['John', 'Sherry', 'Alex', 'Emily'],
'age': [23, 34, 45, 21],
'gender': ['M', 'F', 'M', 'F']}
df = pd.DataFrame(data)
print(df)
输出:
name age gender
0 John 23 M
1 Sherry 34 F
2 Alex 45 M
3 Emily 21 F
现在,我们想筛选出年龄大于30岁的人。我们可以使用布尔索引来轻松实现:
filtered_data = df[df['age'] > 30]
print(filtered_data)
输出:
name age gender
1 Sherry 34 F
2 Alex 45 M
在上面的例子中,我们使用了布尔表达式 df[‘age’] > 30 来创建一个布尔索引。这个表达式返回一个布尔值序列,其中每个值都是True或False,True表示相应行的年龄大于30岁。然后,返回True的行被选中并返回到一个新的DataFrame中。
使用布尔运算符
在Pandas中,您可以使用&、|和~等布尔运算符来组合布尔表达式。
- &:与运算符,表示两个条件都必须为True。
- |:或运算符,表示两个条件中只有一个必须为True。
- ~:非运算符,表示条件为False。
让我们看一些示例代码,了解如何使用这些运算符来创建筛选条件:
# 年龄大于30岁并且是女性的人
filtered_data = df[(df['age'] > 30) & (df['gender'] == 'F')]
print(filtered_data)
# 年龄大于30岁或者是女性的人
filtered_data = df[(df['age'] > 30) | (df['gender'] == 'F')]
print(filtered_data)
# 年龄不是30岁的人
filtered_data = df[~(df['age'] == 30)]
print(filtered_data)
输出:
name age gender
1 Sherry 34 F
name age gender
1 Sherry 34 F
2 Alex 45 M
3 Emily 21 F
name age gender
0 John 23 M
1 Sherry 34 F
2 Alex 45 M
3 Emily 21 F
在DataFrame中使用多个条件
当您需要对DataFrame进行更复杂的筛选时,可以使用多个条件表达式。例如,假设您有以下数据:
data = {'name': ['John', 'Sherry', 'Alex', 'Emily', 'Peter'],
'age': [23, 34, 45, 21, 23],
'gender': ['M', 'F', 'M', 'F', 'M'],
'city': ['New York', 'Chicago', 'San Francisco', 'Seattle', 'Boston']}
要筛选出年龄大于30岁且性别为女性的人,我们可以使用以下代码:
filtered_data = df[(df['age'] > 30) & (df['gender'] == 'F')]
print(filtered_data)
输出:
name age gender
1 Sherry 34 F
要筛选出居住在纽约或旧金山的人,可以使用以下代码:
filtered_data = df[(df['city'] == 'New York') | (df['city'] == 'San Francisco')]
print(filtered_data)
输出:
name age gender city
0 John 23 M New York
2 Alex 45 M San Francisco
还可以结合使用多个条件表达式来构建更复杂的筛选条件。例如,要筛选出居住在旧金山的女性,可以使用以下代码:
filtered_data = df[(df['city'] == 'San Francisco') & (df['gender'] == 'F')]
print(filtered_data)
输出:
name age gender city
3 Emily 21 F San Francisco
使用isin()函数
在Pandas中,可以使用isin()函数轻松地检查值是否存在于DataFrame中的某列中。isin()函数接受一个列表作为参数,该列表包含待匹配的值。它返回一个布尔索引,表示哪些值匹配成功。
让我们看一个示例。假设我们有以下数据:
data = {'name': ['John', 'Sherry', 'Alex', 'Emily', 'Peter', 'Jack'],
'age': [23, 34, 45, 21, 23, 27],
'gender': ['M', 'F', 'M', 'F', 'M', 'M'],
'city': ['New York', 'Chicago', 'San Francisco', 'Seattle', 'Boston', 'Las Vegas']}
要筛选出居住在纽约、旧金山或拉斯维加斯的人,可以使用以下代码:
filtered_data = df[df['city'].isin(['New York', 'San Francisco', 'Las Vegas'])]
print(filtered_data)
输出:
name age gender city
0 John 23 M New York
2 Alex 45 M San Francisco
5 Jack 27 M Las Vegas
结论
Pandas中的布尔索引是一种非常强大的筛选数据的方法。我们可以使用布尔运算符、条件表达式和isin()函数来创建非常复杂的筛选条件。熟练掌握这些技巧,可以让我们更加高效地处理大型、复杂的数据集。