Pandas筛选技巧:lt/gt/eq/ne/le/ge/between全解析

代码说明:

  1. 核心用法:包含 lt/gt/eq/ne/le/ge 及 between 的用法,每个场景都有对应示例。
  2. 处理特殊情况:包含缺失值(NaN)处理、字符串比较、区间边界控制等实战细节。
  3. 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) 之间的行(仅左包含)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值