【问题标题】:How can I match the missing values (nan) of two dataframes?如何匹配两个数据帧的缺失值(nan)?
【发布时间】:2022-01-18 16:55:00
【问题描述】:

如果我在 df1 中的所有值是 df2 中的缺失值,我如何将它们设置为缺失?

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 中的所有 nan,我也想将 df1 的值替换为 nan。

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: python pandas numpy nan


    【解决方案1】:

    使用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。

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 2016-07-01
        • 2017-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多