不使用mask,基于True条件过滤Pandas DataFrame的正确方法
Pandas .filter() 过滤行失败?原因和替代方案看这里
为什么你的代码没用?
Pandas里的.filter()方法根本不是用来过滤行的,它的作用是筛选DataFrame的列(或Series的索引),支持用列名的字符串匹配(比如like参数、正则表达式)或者列名列表来筛选。你传入布尔数组df1.numbers < 2,它会把这个布尔数组当成列名的匹配条件,自然找不到对应的列,结果就变成空的了。
正确的行过滤方案
要筛选numbers列小于2的行,用以下几种方法都可以:
1. 布尔索引(最直接)
df1[df1.numbers < 2]
执行后得到预期结果:
numbers Name 0 0 Tom 3 1 Mary
2. 使用.loc[](更严谨,明确指定行和列)
.loc[]支持行的布尔索引,加上:表示保留所有列:
df1.loc[df1.numbers < 2, :]
结果和上面一致。
3. 使用.query()(更简洁的语法)
适合写复杂的过滤条件,语法更接近自然语言:
df1.query("numbers < 2")
同样能得到你想要的结果。
内容的提问来源于stack exchange,提问作者geds133
相关产品推荐
相关产品推荐

