# 4.2.2 基于条件的数据筛选

基于条件的数据筛选，是指按照给定条件从序列（Series）或数据框（DataFrame）中取出满足条件的数据。其核心机制是布尔索引：使用一个布尔值列表或序列对象，选出对应位置为 True 的元素；作用在数据框上时，选出的是对应的行。语法格式为 `对象[[True, False,…]]`。对象可以是序列或数据框，外层括号中可以是列表，也可以是序列对象，只要其中是布尔值。例如，收盘价序列 `close[[True, False, False]]` 只保留第一项「平安科技」44.3；数据框 `df[[True, False, True, False]]` 只保留第 1、3 行（2024-01 与 2024-03 的全部列）。布尔序列的长度必须与对象长度（数据框则为行数）一致。

序列对象可以进行关系运算（如 `>`、`<`、`==`），结果仍是序列，元素值为布尔值。例如 `close > 20` 得到平安科技 True、南方通信 True、幸福银行 False。数据框选择一列后也可以进行关系运算，结果同样是布尔序列，如 `df['平安科技'] > 47` 在 2024-01 至 2024-04 上依次为 False、True、False、True。

把关系运算看作一个条件，直接与布尔索引结合起来，就形成基于条件的数据筛选。写法是把条件写在方括号里：`close[close > 20]` 筛出收盘价大于 20 的股票（平安科技 44.3、南方通信 22.6）；`df[df['平安科技'] > 47]` 筛出「平安科技」股价高于 47 的月份，得到 2024-02（47.1）和 2024-04（49.8）两整行。易错点：对数据框筛选时，条件应写在某一列上（`df['列名'] > 值`），再把该布尔序列套回整个数据框，才能按行筛选；`df['平安科技'] > 47` 本身只是布尔序列，不是筛选后的数据框；布尔列表长度必须与对象长度相同，否则会出错；手写布尔列表时 True 对应要保留的位置。本节是单条件筛选；多个条件需用 `&`（与）、`|`（或）组合，且每个条件都要加圆括号，见 4.2.3。

## 关键要点
- 序列和数据框都支持布尔索引：用布尔列表或布尔序列选出 True 位置的元素；数据框中选出对应的行。
- 语法：`对象[[True, False,…]]`，括号内可以是列表或序列，元素须为布尔值。
- 序列关系运算结果是布尔序列，如 `close > 20`。
- 数据框先取一列再关系运算，结果也是布尔序列，如 `df['平安科技'] > 47`。
- 条件筛选写法：`序列[序列>阈值]`、`数据框[数据框['列'] > 阈值]`。
- 易错：布尔长度须与对象长度一致；条件写在列上再套回整表；关系运算的结果是布尔序列而非已筛数据；多条件属于下一节。

---
