Python:如果选择的列是空的,从Pandas Dataframe中删除行

问题描述:

假设我有一个大的DataFrame,但我想专注于它的选定部分,例如4列中的3列。如果至少要删除整行这些所选3列中的2个值为空。Python:如果选择的列是空的,从Pandas Dataframe中删除行

例如,这是数据帧我有我的选择列['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 

使用subsetthreshdropna

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)]

使用dropna如果为空值NaN S:

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 

或者,如果空值是空字符串通过boolean indexing比较受values和过滤器创建numpy的数组:

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

如果我使用这个函数,它会考虑所有列,也许我的例子是误导。 – s900n

+0

我有一个非常大的数据框埠我想检查选定的列上的这种情况,并相应地删除整个行。 – s900n

+0

检查上次编辑。 – jezrael