Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果一组值中的任何一个为空,则删除行_Python_Pandas - Fatal编程技术网

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