如何匹配两个数据帧的缺失值 (nan)?

How can I match the missing values (nan) of two dataframes?

如果 df2 中的位置等效值是缺失值,我如何将 df1 中的所有值设置为缺失值?

Data df1:
Index     Data
1          3
2          8
3          9


Data df2:
Index     Data
1          nan
2          2
3          nan

desired output:
Index     Data
1          nan
2          8
3          nan

所以我想保留df1的数据,但只保留df2也有数据条目的位置。对于 df2 中的所有 nans,我也想用 nan 替换 df1 的值。

我尝试了以下方法,但这用 nan 替换了所有数据点。

df1 = df1.where(df2== np.nan, np.nan)

非常感谢您的帮助。

使用mask,这与where正好相反:

df3 = df1.mask(df2.isna())

输出:

   Index  Data
0      1   NaN
1      2   8.0
2      3   NaN

在你的例子中,你将所有匹配非 NaN 的元素设置为 NaN,因为相等不是检查 NaN 的正确方法(np.nan == np.nan 产生 False),你是全部设置为 NaN。

df2 == np.nan更改为df2.notna()

df3 = df1.where(df2.notna(), np.nan)
print(df3)

# Output
   Index  Data
0      1   NaN
1      2   8.0
2      3   NaN