代码之家  ›  专栏  ›  技术社区  ›  YounghunJo

熊猫应用函数替换缺失值的问题

  •  0
  • YounghunJo  · 技术社区  · 2 年前

    我想替换 np.nan 中具有其他值的值 pandas.DataFrame 使用“apply”函数。我会用 replace 方法,其中NaN被替换为每列的最大值(轴=0)。你最好理解下面的内容。

    import pandas as pd
    
    df = pd.DataFrame({'a':[1, np.nan, 3],
                      'b':[np.nan,5,6],
                      'c':[7,8,np.nan]})
    
    result = df.apply(lambda c: c.replace(np.nan, max(c)), axis=0)
    print(result)
    

    有三个 np.nan 价值观其中两个被替换为适当的值,但只有一个值仍然存在 np.nan (下图)

    enter image description here

    设置参数后 axis 1 ,仍然有一个值未被替换。原因是什么?

    1 回复  |  直到 2 年前
        1
  •  2
  •   user7864386 user7864386    2 年前

    Python max 如果列表以NaN开头,则不起作用;所以 max(df['b']) 退货 NaN 并且它不能填充该列中的NaN值。使用 c.max() 相反(这是因为默认情况下 Series.max 跳过NaN)。因此:

    df = df.apply(lambda c: c.replace(np.nan, c.max()), axis=0)
    

    但是 replace ,您可以使用 fillna 在轴上:

    df = df.fillna(df.max(), axis=0)
    

    输出:

         a    b    c
    0  1.0  6.0  7.0
    1  3.0  5.0  8.0
    2  3.0  6.0  8.0