如何对含interval[float64]类型列的Pandas DataFrame按指定区间筛选
Pandas Interval类型列筛选解决方案
错误原因说明
- 第一种写法返回空的原因:
distance_bin已经转换为interval[float64]类型,和字符串'(5.0, 6.0]'类型不匹配,自然无法匹配到结果。 - 第二种写法报错原因:Series对象本身没有
left属性,需要通过.dt访问器获取Interval类型列的左右边界属性,同时逻辑运算符&优先级高于比较运算符,需要给单个判断条件加括号避免语法错误。
正确筛选方法
方法1:直接构造目标Interval对象匹配(最直观)
直接构造和目标区间规则完全一致的pd.Interval对象,直接做等值判断即可:
import pandas as pd # 构造目标区间:左开右闭(5.0,6.0] target_interval = pd.Interval(5.0, 6.0, closed='right') # 筛选 df_A = df[df['distance_bin'] == target_interval]
方法2:通过dt访问器获取边界判断
如果需要灵活匹配区间范围,可以通过.dt访问器提取左右边界判断,注意加括号处理逻辑运算优先级:
# 精确匹配(5.0,6.0]区间 df_A = df[(df['distance_bin'].dt.left == 5.0) & (df['distance_bin'].dt.right == 6.0)] # 按范围规则匹配的写法 df_A = df[(df['distance_bin'].dt.left > 5) & (df['distance_bin'].dt.right <=6)]
方法3:判断值是否在区间内(拓展场景)
如果需要筛选包含某个具体值的所有区间,可以用in判断:
# 筛选所有包含5.5的区间 df_A = df[df['distance_bin'].apply(lambda x: 5.5 in x)]
内容的提问来源于stack exchange,提问作者Serge de Gosson de Varennes
相关产品推荐
相关产品推荐

