【问题标题】:df.loc with NaN is not changing anything带有 NaN 的 df.loc 没有改变任何东西
【发布时间】:2021-03-17 00:29:40
【问题描述】:

我在这里做错了什么?我正在尝试更改我的数据框,但没有任何反应?

df.loc[(df['var1'] == np.nan) & (df['var2'] == np.nan) & (df['var3'] >=0), 'var2'] = 0

【问题讨论】:

  • df.loc[df[['var1', 'var2']].isna().all(axis=1) & df['var3'].ge(0), 'var2'] = 0
  • 也许您没有分配给df(操作返回对数据框的引用,除非inplace=True,否则它们不会修改原始数据)
  • 就地不需要@ti7

标签: python pandas dataframe replace nan


【解决方案1】:

df['var1'] == np.nan 从来都不是真的,因为 np.nan 不等于任何东西而不是他自己! .您可以将 np.nan 值检查为 df.var1.isna() 或在单值情况下 value is np.nan。如果x 是单值np.nan,你试试:x == np.nan 结果是False,你应该做x is np.nan

解决方案

df.iloc[(df[['var1', 'var2']].isna().all(1)) & (df.var3 >= 0), 'var2'] = 0

【讨论】:

    【解决方案2】:

    我猜你想用零填充 nan 值,为此,你可以使用:

    df['DataFrame Column'] = df['DataFrame Column'].fillna(0)
    

    df['DataFrame Column'] = df['DataFrame Column'].replace(np.nan, 0)
    

    如果这不是你问的,请评论!!

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 1970-01-01
      • 2019-08-17
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 2016-01-13
      • 2022-09-30
      相关资源
      最近更新 更多