Pandas lambda 函数无法识别 NaN
Pandas lambda function won't recognize 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 为空,我想使用第一个表达式,否则使用最后一个。
但是,第一个表达式永远不会通过。例如,如果我尝试测试:
pd.isnull(df_merge.iloc[96,3])
它的计算结果为 True,那么为什么第一个表达式没有在该实例中传递?
我也试过:
df_merge["3"].fillna(value=df_merge["1"] + df_merge["2"],inplace=True)
什么都没做。
真诚的,
弗雷德里克
这里最简单的是每行使用 mean
,因为默认情况下 pandas 中的意思是省略 NaN
s(如果不是两个 NaN 都像行 2
):
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
我正在尝试通过其他两个值来评估 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 为空,我想使用第一个表达式,否则使用最后一个。 但是,第一个表达式永远不会通过。例如,如果我尝试测试:
pd.isnull(df_merge.iloc[96,3])
它的计算结果为 True,那么为什么第一个表达式没有在该实例中传递?
我也试过:
df_merge["3"].fillna(value=df_merge["1"] + df_merge["2"],inplace=True)
什么都没做。
真诚的, 弗雷德里克
这里最简单的是每行使用 mean
,因为默认情况下 pandas 中的意思是省略 NaN
s(如果不是两个 NaN 都像行 2
):
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