2017-10-16 53 views
1

假設我有一個大的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 

回答

1

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

1

使用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

相關問題