You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

df.loc结合between筛选字符串列结果缺失行的问题排查

字符串范围筛选未包含预期行的原因

原始DataFrame

a   b   c   d
0   M11 18  1   1.00
1   M11 17  1   1.00
2   M12 16  2   0.90
3   M12 15  2   0.90
4   S11 15  2   0.90
5   S2  13  3   0.85
6   M21 14  3   0.80
7   S21 14  3   0.80
8   M2  13  3   0.70
9   M22 12  3   0.70
10  S22 12  3   0.70
11  M31 11  4   0.65
12  S31 11  4   0.65
13  M3  10  4   0.60
14  A31 10  4   0.60
15  M32 9   4   0.55
16  S32 9   4   0.55
17  M41 8   4   0.50
18  S41 8   4   0.50
19  M42 7   4   0.45
20  S42 7   4   0.45
21  M43 6   4   0.40
22  S43 6   4   0.40
23  A51 5   4   0.35
24  A52 5   4   0.35
25  T51 5   4   0.35
26  T52 5   4   0.35
27  A53 4   4   0.30
28  T53 4   4   0.30

需求与尝试代码

想要筛选列a中介于指定值之间的d列数据,执行代码:

df.loc[df['a'].between('T52', 'T53'), 'd']

预期结果

26    0.35
27    0.30
28    0.30

实际返回结果

26    0.35
28    0.30

原因分析

这不是索引问题,而是字符串的字典序排序规则导致的:

  • Pandas的between方法对字符串采用逐字符的字典序比较,'A53'的首字符是'A','T52'的首字符是'T',在ASCII编码中'A'的数值远小于'T',因此'A53' < 'T52',不满足'T52' <= 'A53' <= 'T53'的条件,第27行被排除。
  • 你预期包含第27行,是混淆了行位置范围和字符串值范围的筛选逻辑,between是基于列a的字符串值判断,和行的位置、索引无关。

解决办法

如果需要按行的位置范围筛选,直接对行索引使用between即可:

df.loc[df.index.between(26, 28), 'd']

内容的提问来源于stack exchange,提问作者biyazelnut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:51:29