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
答
使用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)]
答
使用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]
如果我使用这个函数,它会考虑所有列,也许我的例子是误导。 – s900n
我有一个非常大的数据框埠我想检查选定的列上的这种情况,并相应地删除整个行。 – s900n
检查上次编辑。 – jezrael