如何匹配两个数据帧的缺失值 (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
如果 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