我有以下数据框:
EO EW Inc20 Inc100
bike 6 4.0 7 5
other 1 NaN 1 1
我想将NaN值替换为零。并且我编写了以下代码:
for column in df:
df.loc[df.isnull().any(axis=1), column] = 0
df
它可以很好地工作并将NaN更改为零,但同时也更改了第一列的值。所以我有这个结果:
EO EW Inc20 Inc100
bike 6 4.0 7 5
other 0 0 1 1
但我想拥有:
EO EW Inc20 Inc100
bike 6 4.0 7 5
other 1 0 1 1
如果只需要是否存在一个缺失值由创建计遗漏值面具代替DataFrame.isna
用sum
和过滤DataFrame.loc
用fillna
:
print (df)
EO EW Inc20 Inc100
bike 6 4.0 7 5.0
other 1 NaN 1 NaN
other 1 NaN 1 1.0
m = df.isna().sum().eq(1)
df.loc[:, m] = df.loc[:, m].fillna(0)
或仅为每列链接掩码的一个缺失值创建掩码,并替换为DataFrame.mask
:
m = df.isna() & df.isna().sum().eq(1)
df = df.mask(m, 0)
print (df)
EO EW Inc20 Inc100
bike 6 4.0 7 5.0
other 1 NaN 1 0.0
other 1 NaN 1 1.0
因为DataFrame.fillna
替换所有缺少的值:
df1 = df.fillna(0)
print (df1)
EO EW Inc20 Inc100
bike 6 4.0 7 5.0
other 1 0.0 1 0.0
other 1 0.0 1 1.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句