mask指的是一个布尔数组,其大小和形状与DataFrame或Series相匹配,用于标记满足特定条件的元素,在数据筛选和条件选择中非常好用。
创建mask
最常见的方法是使用比较运算符(如==
, <
, >
, <=
, >=
, !=
)或逻辑运算符(如&
, |
, ~
)对DataFrame或Series进行操作。
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50]
})
# 创建一个mask,选择A列大于2的行
mask = df['A'] > 2
print(mask)
0 False
1 False
2 True
3 True
4 True
Name: A, dtype: bool
使用mask选择数据
一旦有了mask,你可以使用它来从DataFrame中选择数据。这通常是通过.loc[]
或.iloc[]
方法,或者直接在DataFrame上使用布尔索引来实现的。
# 使用loc
selected_rows = df.loc[mask]
print(selected_rows)
'''A B
2 3 30
3 4 40
4 5 50
'''
#使用布尔索引
selected_rows = df[mask]
print(selected_rows)
多条件mask
也可以使用逻辑运算符组合多个条件来创建一个更复杂的mask。
# 创建一个多条件mask,选择A列大于2且B列小于45的行
complex_mask = (df['A'] > 2) & (df['B'] < 45)
selected_rows = df.loc[complex_mask]
print(selected_rows)
'''A B
2 3 30
3 4 40'''
使用np.where
和mask赋值
还可以使用mask与numpy.where
函数结合来为DataFrame中的特定元素赋值。
import numpy as np
# 使用mask和np.where为满足条件的行赋值
# 如果A列的值大于2,则C列将包含字符串'满足条件';否则,它将包含字符串'不满足条件'
df['C'] = np.where(mask, '满足条件', '不满足条件')
print(df)
使用|
(或)和&
(与)运算符结合多个mask
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [True, False, True, True, False]
})
# 创建两个mask
mask1 = df['A'] > 2
mask2 = df['C']
# 结合两个mask(选择A列大于2或C列为True的行)
combined_mask = mask1 | mask2
selected_data = df[combined_mask]
print(selected_data)