Python 如果一组值中的任何一个为空,则删除行
我有一个包含很多列的数据框,我想删除一些列的值为空的行。我知道如何通过一个专栏来做到这一点:Python 如果一组值中的任何一个为空,则删除行,python,pandas,Python,Pandas,我有一个包含很多列的数据框,我想删除一些列的值为空的行。我知道如何通过一个专栏来做到这一点: df = df[df['Column'] != ''] 我想对一组列执行此操作,如下所示: df = df['' not in [df['Column1'], df['Column2'], df['Column3']]' 但是,这会产生以下错误: ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all() 如何执行此操作?是您要查找
df = df[df['Column'] != '']
我想对一组列执行此操作,如下所示:
df = df['' not in [df['Column1'], df['Column2'], df['Column3']]'
但是,这会产生以下错误:
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()
如何执行此操作?是您要查找的内容如果值为空字符串,请创建子集,并为所有
True
s每行添加或:
如果值为NaN
s,None
s与参数子集一起使用:
df = df.dropna(subset=['Column1', 'Column2', 'Column1'])
样本:
df = pd.DataFrame({'A':[np.nan,'','p','hh','f'],
'B':['',np.nan,'','','o'],
'C':['a','s','d','f','g'],
'D':['f','g','h','j','k'],
'E':['l','i',np.nan,'u','o'],
'F':['','','o','i',np.nan]})
print (df)
A B C D E F
0 NaN a f l
1 NaN s g i
2 p d h NaN o
3 hh f j u i
4 f o g k o NaN
df1 = df.dropna(subset=['A', 'B', 'F'])
print (df1)
A B C D E F
2 p d h NaN o
3 hh f j u i
df2 = df[(df[['A', 'B', 'F']] != '').all(axis=1)]
print (df2)
A B C D E F
4 f o g k o NaN
df2 = df[~(df[['A', 'B', 'F']] == '').any(axis=1)]
print (df2)
A B C D E F
4 f o g k o NaN
编辑:
用于比较字符串和某些列为数字,请获取:
TypeError:无法将[“”]与块值进行比较
有两种解决方案—比较由创建的numpy数组或将值转换为string
s,方法是:
我试过你的第一行,df=df[(df[['Column1','Column2','Column1']]!=”)。所有(axis=1)]
,我得到TypeError:无法将['']与块值进行比较
有问题,你有一些混合值,例如数字与字符串。更简单的解决方案是将数据帧转换为numpy数组,然后比较-df=df[(df['Column1','Column2','Column1']]。值!=''。所有(axis=1)]
df = pd.DataFrame({'A':[np.nan,'','p','hh','f'],
'B':['',np.nan,'','','o'],
'C':['a','s','d','f','g'],
'D':['f','g','h','j','k'],
'E':['l','i',np.nan,'u','o'],
'F':['','','o','i',np.nan]})
print (df)
A B C D E F
0 NaN a f l
1 NaN s g i
2 p d h NaN o
3 hh f j u i
4 f o g k o NaN
df1 = df.dropna(subset=['A', 'B', 'F'])
print (df1)
A B C D E F
2 p d h NaN o
3 hh f j u i
df2 = df[(df[['A', 'B', 'F']] != '').all(axis=1)]
print (df2)
A B C D E F
4 f o g k o NaN
df2 = df[~(df[['A', 'B', 'F']] == '').any(axis=1)]
print (df2)
A B C D E F
4 f o g k o NaN
df = pd.DataFrame({'A':[np.nan,7,8,8,8],
'B':['',np.nan,'','','o'],
'C':['a','s','d','f','g'],
'D':['f','g','h','j','k'],
'E':['l','i',np.nan,'u','o'],
'F':['','','o','i',np.nan]})
print (df)
A B C D E F
0 NaN a f l
1 7.0 NaN s g i
2 8.0 d h NaN o
3 8.0 f j u i
4 8.0 o g k o NaN
df2 = df[(df[['A', 'B', 'F']].values != '').all(axis=1)]
print (df2)
A B C D E F
4 8.0 o g k o NaN
df2 = df[(df[['A', 'B', 'F']].astype(str) != '').all(axis=1)]
print (df2)
A B C D E F
4 8.0 o g k o NaN