过滤其值小于0的pandas数据帧行

doo*_*oms 7 python pandas

我有像这样的熊猫数据框

df = pd.DataFrame(data=[[21, 1],[32, -4],[-4, 14],[3, 17],[-7,NaN]], columns=['a', 'b'])
df
Run Code Online (Sandbox Code Playgroud)

我希望能够删除列列表中具有负值的所有行,并保留具有NaN的行.

在我的例子中只有2列,但我的数据集中有更多,所以我不能一个接一个地做.

Com*_*low 19

如果你想将它应用到所有列,这样做df[df > 0]dropna():

>>> df[df > 0].dropna()
    a   b
0  21   1
3   3  17
Run Code Online (Sandbox Code Playgroud)

如果你知道要应用它的列,那么只对那些cols做df[df[cols] > 0]:

>>> cols = ['b']
>>> df[cols] = df[df[cols] > 0][cols]
>>> df.dropna()
    a   b
0  21   1
2  -4  14
3   3  17
Run Code Online (Sandbox Code Playgroud)

  • 如果我的任何行中都有NaN,这将无效 (2认同)

rga*_*han 8

我发现你可以通过这样做来简化答案:

>>> cols = ['b']
>>> df = df[df[cols] > 0]
Run Code Online (Sandbox Code Playgroud)

dropna() 不是就地方法,因此您必须存储结果。

>>> df = df.dropna()
Run Code Online (Sandbox Code Playgroud)