基于条件的数据筛选,是指按照给定条件从序列(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, False,…]],括号内可以是列表或序列,元素须为布尔值。close > 20。df['平安科技'] > 47。序列[序列>阈值]、数据框[数据框['列'] > 阈值]。