熊猫删除行的值小于给定值

问题描述 投票:3回答:2

我想删除仅包含小于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实现,而不是遍历所有行?

python pandas
2个回答
3
投票

您可以调用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

2
投票

您可以使用pandas boolean indexing

dropped_df = df.loc[((df<10) | (df>25)).any(1)]
  • df<10将返回布尔df
  • [|是OR运算符
  • [.any(1)返回轴1(行)see documentation]上的任何真元素。
  • [df.loc[]然后根据布尔df过滤数据帧
© www.soinside.com 2019 - 2024. All rights reserved.