df.loc NaN 没有改变任何东西
df.loc with NaN is not changing anything
我在这里做错了什么?我正在尝试更改我的数据框,但没有任何反应?
df.loc[(df['var1'] == np.nan) & (df['var2'] == np.nan) & (df['var3'] >=0), 'var2'] = 0
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
我猜您想用零填充 nan 值,为此,您可以使用:
df['DataFrame Column'] = df['DataFrame Column'].fillna(0)
或
df['DataFrame Column'] = df['DataFrame Column'].replace(np.nan, 0)
如果这不是你问的,请评论!!
我在这里做错了什么?我正在尝试更改我的数据框,但没有任何反应?
df.loc[(df['var1'] == np.nan) & (df['var2'] == np.nan) & (df['var3'] >=0), 'var2'] = 0
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
我猜您想用零填充 nan 值,为此,您可以使用:
df['DataFrame Column'] = df['DataFrame Column'].fillna(0)
或
df['DataFrame Column'] = df['DataFrame Column'].replace(np.nan, 0)
如果这不是你问的,请评论!!