熊猫lambda函数无法识别NaN

时间:2020-02-14 08:42:17

标签: python pandas lambda nan

我正在尝试通过其他两个值来评估DF中的新列,但是如果缺少值,则尝试传递另一个表达式。

df_merge["3"] = df_merge.apply(lambda row: row["1"] + row["2"] 
    if pd.isnull(row["1"]) or pd.isnull(row["2"])
    else (row["1"] + row["2"])/2, 
    axis=1)

                         loc              1               2               3
    0                   135200           0.391           0.224          0.3075
    1                   135210           0.400           0.220          0.3100
    95                  136150             NaN           0.505             NaN
    96                  136160             NaN           0.527             NaN

这就是我得到的。因此,如果1或2为null,我想使用第一个表达式,否则使用最后一个。 但是,第一个表达式永远不会传递。例如,如果我尝试测试:

pd.isnull(df_merge.iloc[96,3])

它的计算结果为True,那么为什么不在该实例中传递第一个表达式?

我也尝试过:

df_merge["3"].fillna(value=df_merge["1"] + df_merge["2"],inplace=True)

什么也没做。

此致, 弗雷德里克

1 个答案:

答案 0 :(得分:1)

这里最简单的方法是每行使用mean,因为默认情况下,大熊猫中的均值会省略NaN(如果不是像2行一样都是NaN):

df_merge = pd.DataFrame({'1':[np.nan, np.nan, 1, 2],
                   '2':[5, np.nan, np.nan, 4]})

df_merge["3"] = df_merge[["1",'2']].mean(axis=1)
print (df_merge)
     1    2    3
0  NaN  5.0  5.0
1  NaN  NaN  NaN
2  1.0  NaN  1.0
3  2.0  4.0  3.0