前言
在 pandas 中,rainfall < 400 和 rainfall[rainfall < 400] 是数据筛选的两个核心步骤,前者生成布尔掩码(判断矩阵),后者基于该掩码实现数据筛选取值,二者是依赖关系(后者必须基于前者才能生效),核心区别和使用逻辑如下,结合之前的降雨量 DataFrame 实例讲解更易理解。
先明确示例基础(基于推荐的 2 行 3 列 DataFrame)
先复用修正后的可运行代码,确定基础数据结构,后续所有分析基于此:
import pandas as pd
rainfall = pd.DataFrame(
data={
"City 1": [300.1, 100.2],
"City 2": [400.3, 300.4],
"City 3": [1000.5, 1100.6]
}
)
print(rainfall)
# 基础数据:2行(行索引0/1)、3列(City1/City2/City3)
# City 1 City 2 City 3
# 0 300.1 400.3 1000.5
# 1 100.2 300.4 1100.6
一、rainfall < 400:生成布尔掩码(Boolean Mask)
核心作用
对 DataFrame 中的每一个元素逐一进行「是否小于 400」的判断,返回一个和原 DataFrame 行列结构完全一致的新 DataFrame,其中每个位置的值只有 True(满足条件:<400)或 False(不满足条件:≥400)—— 这个新的布尔型 DataFrame 就是布尔掩码,仅用于「条件判断」,不直接返回原数据。
print(rainfall < 400)
# 行列和原数据完全一致,仅存True/False
# City 1 City 2 City 3
# 0 True False False
# 1 True True False
关键特性
二、rainfall[rainfall < 400]:基于布尔掩码筛选并提取原数据
核心作用
将 rainfall < 400 生成的布尔掩码作为行 / 列筛选条件传入原 DataFrame 的中括号 [],实现:
对原 DataFrame 中每一个位置,若掩码对应位置为 True:保留原数据的数值;
若掩码对应位置为 False:用 NaN(非数值)填充,代表该位置不满足条件。
最终返回一个和原 DataFrame 行列结构仍一致的新 DataFrame,其中「满足条件的位置保留原数值,不满足的位置为 NaN」—— 这是 pandas 中按条件筛选元素的标准用法。
print(rainfall[rainfall < 400])
# 行列结构不变,满足条件保留原值,不满足为NaN
# City 1 City 2 City 3
# 0 300.1 NaN NaN
# 1 100.2 300.4 NaN
关键特性
结构不变:行数、列数、索引 / 列名仍和原 DataFrame 一致;
保留原数值:满足条件的位置直接提取原数据的数值,类型不变;
不满足填 NaN:NaN 是 pandas 中缺失值的标准表示,方便后续缺失值处理(如删除、填充);
依赖掩码:中括号内必须是和原 DataFrame 行列结构一致的布尔掩码,否则会报错。
三、核心区别总结(表格对比,一目了然)
| rainfall < 400 | 布尔型 DataFrame | 和原数据一致 | True/False | 生成条件判断掩码 | [False, True] |
| rainfall[rainfall < 400] | 数值型 DataFrame(含 NaN) | 和原数据一致 | 原数值 / NaN | 基于掩码筛选提取原数据 | [NaN, 300.4] |
四、拓展:如何提取「仅满足条件的纯数值(无 NaN、无结构)」?
如果需要只获取所有 < 400 的数值,不保留原行列结构、不含 NaN,可在掩码筛选后加 .dropna()(删除缺失值)或 .stack()(堆叠为一维),常用写法:
# 提取所有满足条件的数值,返回一维Series
valid_rain = rainfall[rainfall < 400].stack()
print(valid_rain)
# 输出:仅保留满足条件的原值,带原索引
# 0 City 1 300.1
# 1 City 1 100.2
# City 2 300.4
# dtype: float64
# 进一步转为纯列表
valid_rain_list = valid_rain.tolist()
print(valid_rain_list) # [300.1, 100.2, 300.4]
五、记忆口诀
先判断,后筛选;掩码是前提,取值靠中括号。
rainfall < 400 → 逐个判断打标签(True/False)
rainfall[掩码] → 按标签取值(留原值/填NaN)
网硕互联帮助中心



评论前必须登录!
注册