【问题标题】:how to delete nan in df from row without losing the whole row?如何从行中删除df中的nan而不丢失整行?
【发布时间】:2020-04-03 06:25:39
【问题描述】:

G'day,我怎样才能在不丢失整行的情况下删除 nan 值? 这就是我的df 的样子。

我试过pandasdf = schule.dropna() 但这删除了行中的所有内容。

但我必须保持价值观,因为最后,我希望它们向上。

【问题讨论】:

  • 你想用 None 替换它们吗?因为不清楚你想要达到什么,所以总会有一个值(NaN、None或者有用的值)
  • 你能告诉我们你想要的样本输出吗?
  • 我的猜测是他们不想替换NaN,而是将df中的所有行合并为一行,将NaN替换为从不同行获得的值。
  • 这看起来好像修复创建数据帧的解析器会更有意义......

标签: python python-3.x pandas


【解决方案1】:

这可能会有所帮助。你可以试试 !!!!

【讨论】:

    【解决方案2】:

    根据您的问题陈述,您希望降低 nan 值的优先级,并将非 nan 值放在首位。

    import numpy as np
    import pandas as pd
    import functools
    
    def drop_and_roll(col, na_position='last', fillvalue=np.nan):
        result = np.full(len(col), fillvalue, dtype=col.dtype)
        mask = col.notnull()
        N = mask.sum()
        if na_position == 'last':
            result[:N] = col.loc[mask]
        elif na_position == 'first':
            result[-N:] = col.loc[mask]
        else:
            raise ValueError('na_position {!r} unrecognized'.format(na_position))
        return result
    
    df = pd.read_table('data', sep='\s{2,}')
    
    print(df.apply(functools.partial(drop_and_roll, fillvalue='')))
    

    【讨论】:

      【解决方案3】:

      假设您想要回填值,然后删除此示例适用的任何列中出现的任何重复项:

      import pandas as pd
      import numpy as np
      
      data = [
          ['POINT_1.1', 'POINT_1.2', pd.NA],
          [pd.NA, pd.NA, 'POINT_1.3'],
          ['POINT_2.1', 'POINT_2.2', pd.NA],
          [pd.NA, pd.NA, 'POINT_2.3']
      
      ]
      
      df = pd.DataFrame(data)
      df
      
      #            0          1          2
      # 0  POINT_1.1  POINT_1.2       <NA>
      # 1       <NA>       <NA>  POINT_1.3
      # 2  POINT_2.1  POINT_2.2       <NA>
      # 3       <NA>       <NA>  POINT_2.3
      
      t = df.T.bfill().T.bfill()
      t
      
      #            0          1          2
      # 0  POINT_1.1  POINT_1.2  POINT_1.3
      # 2  POINT_2.1  POINT_2.2  POINT_2.3
      
      for column in t.columns:
          t = t.drop_duplicates(column)
      t
      
      #            0          1          2
      # 0  POINT_1.1  POINT_1.2  POINT_1.3
      # 2  POINT_2.1  POINT_2.2  POINT_2.3
      
      
      
      

      【讨论】:

        猜你喜欢
        • 2022-10-13
        • 2021-02-07
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 2012-05-13
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        相关资源
        最近更新 更多