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

为什么max()有时返回nan,有时忽略它?

  •  15
  • Cleb  · 技术社区  · 7 年前

    这个问题的动机是 an answer 我刚才给了。

    假设我有一个这样的数据框

    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame({'a': [1, 2, np.nan], 'b': [3, np.nan, 10], 'c':[np.nan, 5, 34]})
    
         a     b     c
    0  1.0   3.0   NaN
    1  2.0   NaN   5.0
    2  NaN  10.0  34.0
    

    我想替换 NaN 按行的最大值, I can do

    df.apply(lambda row: row.fillna(row.max()), axis=1)
    

    这给了我想要的输出

          a     b     c
    0   1.0   3.0   3.0
    1   2.0   5.0   5.0
    2  34.0  10.0  34.0
    

    然而,当我使用

    df.apply(lambda row: row.fillna(max(row)), axis=1)
    

    出于某种原因,仅在以下三种情况中的两种情况下才能正确更换:

         a     b     c
    0  1.0   3.0   3.0
    1  2.0   5.0   5.0
    2  NaN  10.0  34.0
    

    确实,如果我亲自检查

    max(df.iloc[0, :])
    max(df.iloc[1, :])
    max(df.iloc[2, :])
    

    然后打印出来

    3.0
    5.0
    nan
    

    执行时

    df.iloc[0, :].max()
    df.iloc[1, :].max()
    df.iloc[2, :].max()
    

    它打印预期的

    3.0
    5.0
    34.0
    

    我的问题是为什么 max() 三种情况中的一种失败,但并非所有三种情况都失败。为什么 南安 有时被忽视,有时不被忽视?

    4 回复  |  直到 7 年前