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

时间:2020-06-22 10:37:09

标签: python pandas

我正在整理数据集中的一些行

output = {
         'id1': ['False', 'False', 'False', 'False'],
         'id2': ['True', 'False', 'False', 'False'],
         'id3': ['True', 'False', 'True', 'False'],
         'id4': ['True', 'False', 'True', 'True'],
    }

因此使用上面的第2行包含所有false enter image description here

由于这个原因,我不需要使用它,所以我只想删除它

newoutput = {
         'id1': ['False',  'False', 'False'],
         'id2': ['True',  'False', 'False'],
         'id3': ['True',  'True', 'False'],
         'id4': ['True',  'True', 'True'],
    }

我可以检查其中是否包含错误的行

output.drop(output[output != False].index, inplace=True)

但这只是查看行中的ANY值是否为False而不是All

2 个答案:

答案 0 :(得分:4)

使用DataFrame.any来测试是否匹配boolean indexing中的至少一个True,因此仅删除了False的行

因为使用了this解决方案,所以不必将其转换为布尔值:

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

答案 1 :(得分:2)

我通过df构建了df = pd.DataFrame(output)

您可以使用

>>> 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

我强烈建议使用布尔值而不是字符串来表示TrueFalse。在那种情况下,解决方案是简单地重新分配给df[df.any(1)]