Skip to main content
 首页 » 编程设计

python之根据列值删除 Pandas 数据框中的行

2025年05月04日30sharpest

我有一个这样的数据框:

cols = [ 'a','b'] 
df = pd.DataFrame(data=[[NaN, -1, NaN, 34],[-32, 1, -4, NaN],[4,5,41,14],[3, NaN, 1, NaN]], columns=['a', 'b', 'c', 'd']) 

我想检索所有行,当列“a”和“b”为非负数但如果其中任何一个或全部丢失,我想保留它们。

结果应该是

   a   b   c   d 
2  4   5  41  14 
3  3 NaN   1 NaN 

我已经试过了,但它没有给出预期的结果。

df[(df[cols]>0).all(axis=1) | df[cols].isnull().any(axis=1)] 

请您参考如下方法:

IIUC,你其实想要

>>> df[((df[cols] > 0) | df[cols].isnull()).all(axis=1)] 
   a   b   c   d 
2  4   5  41  14 
3  3 NaN   1 NaN 

现在您得到的是“如果它们都是正数”或“任何一个都为空”。你想要“如果它们都是(正或空)”。 (将 > 0 替换为 >=0 以获得非负性。)

因为 NaN 不是正数,我们可以通过翻转条件来简化,并使用类似的东西

>>> df[~(df[cols] <= 0).any(axis=1)] 
   a   b   c   d 
2  4   5  41  14 
3  3 NaN   1 NaN