Pandas删除值小于给定值的行

时间:2017-06-14 18:52:19

标签: python pandas

我想删除仅包含不小于10且大于25的值的行。我的示例数据框将如下所示:

a   b   c  
1   2   3  
4   5   16  
11  24  22  
26  50  65  

预期输出:

a   b   c  
1   2   3  
4   5   16   
26  50  65  

因此,如果该行包含小于10或大于25的任何值,则该行将保留在数据帧中,否则需要将其删除。

我有什么方法可以用Pandas实现这一点而不是遍历所有行?

2 个答案:

答案 0 :(得分:2)

您可以致电apply并将结果返回到名为“保留”的新列。然后,您可以使用此列删除不需要的行。

import pandas as pd
l = [[1,2,3],[4,5,6],[11,24,22],[26,50,65]]
df = pd.DataFrame(l, columns = ['a','b','c']) #Set up sample dataFrame

df['keep'] = df.apply(lambda row: sum(any([(x < 10) or (x > 25) for x in row])), axis = 1)

any()函数返回一个生成器。调用sum(generator)只会返回存储在生成器中的所有结果的总和。

检查this any()的工作原理。 Apply函数仍然遍历所有行,如for循环,但代码看起来更干净。如果不迭代所有行,我无法想到这样做的方法。

输出:

    a   b   c  keep
0   1   2   3     1
1   4   5   6     1
2  11  24  22     0
3  26  50  65     1


df = df[df['keep'] == 1] #Drop unwanted rows

答案 1 :(得分:1)

您可以使用pandas boolean indexing

dropped_df = df.loc[((df<10) | (df>25)).any(1)]
  • df<10将返回布尔df
  • |是OR运算符
  • .any(1)返回第1轴(行)see documentation上的所有true元素
  • df.loc[]然后根据布尔df过滤数据框