我们说我有一个很大的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
答案 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)]