如何对列值为numpy数组的DataFrame按列条件执行索引操作?
错误原因说明
你最初的写法df[df['stats'] is None]存在两处逻辑问题:
df['stats']返回的是完整的Series对象,is None判断的是这个Series对象本身是否为None,而非遍历判断列内每个元素的属性,最终只会返回单个布尔值False- pandas接收到单个布尔值作为索引时,会将其作为行标签去匹配查找,自然触发KeyError报错
筛选空numpy数组的行
numpy空数组的size属性固定为0,通过apply遍历列中每个数组元素做判断即可:
# 方法1:通过数组size判断,兼容任意维度空数组 empty_rows = df[df['stats'].apply(lambda x: x.size == 0)] # 方法2:一维数组也可以用长度判断 empty_rows = df[df['stats'].apply(lambda x: len(x) == 0)]
筛选等于特定numpy数组的行
不能直接用==对比两个numpy数组,否则会返回布尔数组触发pandas维度匹配错误,改用numpy内置的np.array_equal方法判断两个数组是否完全一致即可:
# 筛选stats列等于[1,1,1]的所有行 target = np.array([1,1,1]) target_rows = df[df['stats'].apply(lambda x: np.array_equal(x, target))]
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

