Python 如果行中的所有值都为false,则删除该行

Python 如果行中的所有值都为false,则删除该行,python,pandas,Python,Pandas,我希望整理数据集中的一些行 output = { 'id1': ['False', 'False', 'False', 'False'], 'id2': ['True', 'False', 'False', 'False'], 'id3': ['True', 'False', 'True', 'False'], 'id4': ['True', 'False', 'True', 'True'], } 因此,使用上面的

我希望整理数据集中的一些行

output = {
         'id1': ['False', 'False', 'False', 'False'],
         'id2': ['True', 'False', 'False', 'False'],
         'id3': ['True', 'False', 'True', 'False'],
         'id4': ['True', 'False', 'True', 'True'],
    }
因此,使用上面的第2行包含所有false

由于这一点,我将不需要使用它,所以我只想删除它

newoutput = {
         'id1': ['False',  'False', 'False'],
         'id2': ['True',  'False', 'False'],
         'id3': ['True',  'True', 'False'],
         'id4': ['True',  'True', 'True'],
    }
我甚至检查了其中有false的行

output.drop(output[output != False].index, inplace=True)
但这只会看到行中的任何值为False,而不是所有的值都是我通过df=pd.DataFrameoutput构建的df

你可以用

>>> df[df.replace({'False': False, 'True': True}).any(1)]
     id1    id2    id3   id4
0  False   True   True  True
2  False  False   True  True
3  False  False  False  True
我强烈建议使用布尔值而不是字符串来表示True和False。在这种情况下,解决方案是简单地重新分配到df[df.any1]。

用于测试是否至少在中匹配一个True,因此只删除false行

因为使用的是布尔值,所以不需要将解决方案转换为布尔值:

df = df[df.any(axis=1)]

出于某种原因,OP使用字符串表示True和False。@timgeb-编辑的答案。什么类型。。。您使用的是?@timgeb-yop,在原始数据中。可以添加df[df.eq'True'。sumaxis=1.ge1]如果他使用字符串作为替代答案,他可能会有非真/假值`谢谢-原因它没有布尔是因为数据被作为字符串拉取。我应该转换它,所以我为周围的工作和suggestion@JarrattPerkins如果问题无法在上游解决,我建议在获取数据后发出df=df.replace{'False':False,'True':True}。然后只需在代码中使用布尔值df和df=df[any1]进行过滤。是否有一种不包括最后一列的方法呢?我刚刚注意到它的NOT true/falseout=out[out.iloc[:,:-1]。anyaxis=1]是true和false字符串?我想不是,所以最好的办法就是把“真”、“假”改成“真”、“假”