【问题标题】:Python: drop value=0 row in specific columns [duplicate]Python:在特定列中删除值= 0行[重复]
【发布时间】:2018-09-25 06:55:52
【问题描述】:

我想删除特定列中零值的行

>>> df

   salary   age   gender
0   10000    23     1
1   15000    34     0
2   23000    21     1
3     0      20     0
4   28500     0     1
5   35000    37     1

缺少薪水和年龄列中的一些数据 第三列,gender 是一个二元变量,其中 1 表示男性 0 表示女性。而这里的 0 不是缺失数据, 我想删除薪水或年龄中缺少的行 所以我可以得到

>>> df
   salary   age   gender
0   10000    23     1
1   15000    34     0
2   23000    21     1
3   35000    37     1

【问题讨论】:

  • df = df[(df['salary'] > 0) & (df['age'] > 0)]
  • 感谢您为我编辑格式
  • 这是我发布这个问题后第一次在这个论坛上提问,我发现格式很糟糕,你在我做之前编辑了它非常感谢

标签: python python-3.x pandas


【解决方案1】:

选项 1

您可以使用pd.DataFrame.loc 过滤您的数据框:

df = df.loc[~((df['salary'] == 0) | (df['age'] == 0))]

选项 2

或者更聪明的方式来实现你的逻辑:

df = df.loc[df['salary'] * df['age'] != 0]

这是可行的,因为如果薪水或年龄为 0,他们的乘积也将为 0。

选项 3

下面的方法可以很方便的扩展到多列:

df.loc[(df[['a', 'b']] != 0).all(axis=1)]

说明

  • 在所有 3 种情况下,都会生成布尔数组,用于索引您的数据帧。
  • 所有这些方法都可以通过使用numpy 表示进一步优化,例如df['salary'].values

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 2020-07-08
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2015-04-14
    • 2022-11-17
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多