云计算百科
云计算领域专业知识百科平台

rainfall <400 和rainfall[rainfall <400]的区别

前言

在 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

关键特性

  • 结构一致:行数、列数、索引 / 列名和原 DataFrame 完全相同,一一对应;
  • 类型为布尔:所有值都是 bool 类型,无原数据的数值;
  • 仅做判断:不筛选、不提取原数据,仅标记「哪些位置满足条件」。
  • 二、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 行列结构一致的布尔掩码,否则会报错。

    三、核心区别总结(表格对比,一目了然)

    表达式核心类型行列结构存储值类型核心作用结果示例(City2 列)
    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)

    最终总结

  • rainfall < 400 是条件判断步骤,生成和原数据同结构的布尔掩码,仅标记满足条件的位置,无原数值;
  • rainfall[rainfall < 400] 是数据提取步骤,基于前一步的布尔掩码,从原数据中筛选提取满足条件的数值,不满足的位置填 NaN,保留原行列结构;
  • 二者是先后依赖关系,后者必须以前者生成的布尔掩码为条件,是 pandas 按元素条件筛选的核心组合用法;
  • 若需纯满足条件的数值,可在筛选后用 .stack()/.dropna() 进一步处理,去除 NaN 和原结构。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » rainfall <400 和rainfall[rainfall <400]的区别
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!