Python:如果选定的列为空,则从Pandas Dataframe中删除行

时间:2017-10-16 06:36:03

标签: python pandas dataframe

我们说我有一个很大的DataFrame但是我想集中精力选择它的一部分,就像4列中的3列一样。如果至少有两个值,我想删除整行这些选定的3列是空的。

例如,这是我拥有的数据框,我选择的列是['B','C','D']

 A   B   C   D
     1       1
 2           2
 3   3   3   3
 4         

如果所选列(第二行和第四行)中至少有两个值为空,如何删除行。

最终的数据框是:

 A   B   C   D
     1       1
 3   3   3   3

2 个答案:

答案 0 :(得分:1)

如果空值为NaN s:

,请使用dropna
cols = ['B','C','D']

df = df.dropna(subset=cols, thresh=2)
#same as
#df = df[df[cols].isnull().sum(1) < 2]
print (df)
     A    B    C    D
0  NaN  1.0  NaN  1.0
2  3.0  3.0  3.0  3.0

或者,如果空值为空,则比较由values创建的numpy数组并按boolean indexing过滤:

df = df[(df[cols].values == '').sum(axis=1) < 2]

答案 1 :(得分:1)

subset

上使用thresh dropna
In [2720]: df.dropna(subset=['B','C','D'], thresh=2)
Out[2720]:
     A    B    C    D
0  NaN  1.0  NaN  1.0
2  3.0  3.0  3.0  3.0

或者,使用notnull

In [2723]: df[df[['B', 'C', 'D']].notnull().sum(1).ge(2)]
Out[2723]:
     A    B    C    D
0  NaN  1.0  NaN  1.0
2  3.0  3.0  3.0  3.0

详细

In [2722]: df
Out[2722]:
     A    B    C    D
0  NaN  1.0  NaN  1.0
1  2.0  NaN  NaN  2.0
2  3.0  3.0  3.0  3.0
3  4.0  NaN  NaN  NaN

如果值为空白而不是空,请使用df[df[['B', 'C', 'D']].eq('').sum(1).lt(2)]df[df[['B', 'C', 'D']].ne('').sum(1).ge(2)]