代码说明:
- 核心用法:包含
lt/gt/eq/ne/le/ge 及 between 的用法,每个场景都有对应示例。 - 处理特殊情况:包含缺失值(NaN)处理、字符串比较、区间边界控制等实战细节。
- Series 与 DataFrame 区分:明确单列(Series)和多列(DataFrame)操作的差异,以及聚合判断(
all/any)的用法。
import pandas as pd
import numpy as np
# 准备示例数据(可根据实际数据替换)
df = pd.DataFrame({
'A': [3, 6, 2, np.nan, 4],
'B': [8, 1, 5, 3, 7],
'C': ['a', 'c', 'b', 'd', 'a']
})
df2 = pd.DataFrame({ # 用于多表比较的示例数据
'A': [4, 5, 3, 2, 5],
'B': [7, 2, 6, 4, 8],
'C': ['b', 'a', 'c', 'd', 'b']
})
# --------------------------
# 1. Series 比较(单列操作)
# --------------------------
# 1.1 基础筛选:小于(lt)、大于等于(ge)、不等于(ne)
df[df['A'].lt(5)] # 筛选 A 列 < 5 的行(等价于 df[df['A'] < 5])
df[df['B'].ge(5)] # 筛选 B 列 >= 5 的行(等价于 df[df['B'] >= 5])
df[df['A'].ne(4)] # 筛选 A 列 != 4 的行(等价于 df[df['A'] != 4])
# 1.2 缺失值处理:将 NaN 视为 False/True(fillna 配合使用)
df[df['A'].lt(5).fillna(False)] # 筛选 A 列 < 5 的行,NaN 视为不满足条件
df[df['A'].gt(3).fillna(True)] # 筛选 A 列 > 3 的行,NaN 视为满足条件
# 1.3 字符串比较(按字典序)
df[df['C'].gt('b')] # 筛选 C 列字符串 > 'b' 的行(如 'c'/'d')
df[df['C'].eq('a')] # 筛选 C 列字符串 == 'a' 的行
# --------------------------
# 2. DataFrame 比较(多列操作)
# --------------------------
# 2.1 与标量比较(返回布尔型 DataFrame)
df.lt(5) # 所有元素是否 < 5(字符串列自动返回 False)
df.ge(3) # 所有元素是否 >= 3
# 2.2 按行聚合判断(all:所有列满足;any:至少一列满足)
df[df.le(6).all(axis=1)] # 筛选所有列都 <= 6 的行
df[df.gt(7).any(axis=1)] # 筛选至少有一列 > 7 的行
# 2.3 与另一 DataFrame 逐元素比较
df['A'].gt(df2['A']) # df 的 A 列是否大于 df2 的 A 列(返回布尔 Series)
df.lt(df2) # df 所有元素是否小于 df2 对应元素(返回布尔 DataFrame)
# --------------------------
# 3. 区间比较(between:包含/排除边界)
# --------------------------
df[df['A'].between(2, 5)] # 筛选 A 列在 [2,5] 之间的行(默认包含边界)
df[df['B'].between(3, 7, inclusive='neither')] # 筛选 B 列在 (3,7) 之间的行(排除边界)
df[df['B'].between(3, 7, inclusive='left')] # 筛选 B 列在 [3,7) 之间的行(仅左包含)