首页 > 解决方案 > 如何删除由一系列特定值组成的行

问题描述

所以我有以下df:

import pandas as pd
import numpy as np

data = [['John', 1.0,    2.0, 3.0],
        ['Mary', 0.0, np.nan,  ""],
        ['Chad', 0.0, np.nan, 1.0]]

df = pd.DataFrame(data, columns=['Name', 'Value1', 'Value2', 'Value3'])
df.set_index('Name', inplace=True)

我需要删除仅包含:0.0 或 NaN 或“”的每一列。换句话说,在上面的示例中,我只想删除 Mary 的行。Chad 的行不会被删除,因为它在第三列上有 1.0。但我被卡住了。

我一直在尝试这样做:

df = df.drop(df[(df[:] == 0) | (df[:] == '') | (df[:] == np.nan)])

但它返回此错误:

FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  result = method(y)

关于如何做到这一点的任何想法?

标签: pythonpandas

解决方案


一种方法是简单地使用, anysince all并评估为:0.0NaN""False

df[df.any(1)]

       Value1  Value2 Value3
Name                       
John     1.0     2.0      3
Chad     0.0     NaN      1

推荐阅读