【问题标题】:better way to drop nan rows in pandas在 pandas 中删除 nan 行的更好方法
【发布时间】:2016-07-22 02:48:07
【问题描述】:

我自己找到了一种从 pandas 数据框中删除 nan 行的方法。给定一个数据框dat,其列x 包含nan 值,有没有更优雅的方法来删除dat 的每一行,它在x 列中有一个nan 值?

dat = dat[np.logical_not(np.isnan(dat.x))]
dat = dat.reset_index(drop=True)

【问题讨论】:

  • 你的意思是pd.dropna()
  • 看起来会起作用的

标签: python pandas


【解决方案1】:

使用dropna:

dat.dropna()

如果所有标签都是 nan 或任何标签都是 nan,您可以传递参数 how 来删除

dat.dropna(how='any')    #to drop if any value in the row has a nan
dat.dropna(how='all')    #to drop if all values in the row are nan

希望能回答您的问题!

编辑 1: 如果您只想从特定列中删除包含 nan 值的行,正如 J. Doe 在下面的回答中所建议的那样,您可以使用以下内容:

dat.dropna(subset=[col_list])  # col_list is a list of column names to consider for nan values.

【讨论】:

    【解决方案2】:

    如果您想删除“x”具体为 nan 的行,要扩展 Hitesh 的答案,您可以使用子集参数。他的回答会删除其他列也有 nan 的行

    dat.dropna(subset=['x'])
    

    【讨论】:

      【解决方案3】:

      以防万一先前答案中的命令不起作用, 尝试这个: dat.dropna(subset=['x'], inplace = True)

      【讨论】:

      • 是的,pandas 默认是 inplace=False,需要记住
      【解决方案4】:
      bool_series=pd.notnull(dat["x"])
      dat=dat[bool_series]
      

      【讨论】:

      • 代码总是好的,但它也有助于添加一些关于此代码如何回答原始问题的 cmets/context。
      • 请编辑您的答案以添加对您的代码如何工作以及它如何解决 OP 问题的解释。许多 StackOverflow 用户是新手,不会理解您发布的代码,因此不会从您的回答中学习。
      【解决方案5】:

      根据特定列的 Nan 值删除行:

      d= pd.DataFrame([[2,3],[4,None]])   #creating data frame
      d
      Output:
          0   1
      0   2   3.0
      1   4   NaN
      
      d = d[np.isfinite(d[1])]  #Select rows where value of 1st column is not nan
      d
      
      Output:
          0   1
      0   2   3.0
      

      【讨论】:

        猜你喜欢
        • 2016-02-12
        • 2014-09-28
        • 2014-12-30
        • 1970-01-01
        • 2010-12-20
        • 2016-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多