首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果数据帧中的一个值是NaN,并将其替换为0,请检查熊猫。

如果数据帧中的一个值是NaN,并将其替换为0,请检查熊猫。
EN

Stack Overflow用户
提问于 2020-07-03 08:40:59
回答 2查看 69关注 0票数 1

我有以下数据框架:

代码语言:javascript
复制
        EO  EW  Inc20   Inc100
bike    6   4.0  7      5
other   1   NaN  1      1

我想将NaN值替换为零。我写了以下代码:

代码语言:javascript
复制
for column in df:
    df.loc[df.isnull().any(axis=1), column] = 0
df

它运行良好,并将NaN更改为零,但也更改了第一列的值。所以我得到了这个结果:

代码语言:javascript
复制
        EO  EW  Inc20   Inc100
bike    6   4.0 7        5
other   0   0   1        1

但我想要:

代码语言:javascript
复制
        EO  EW  Inc20   Inc100
bike    6   4.0 7        5
other   1   0   1        1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-03 08:45:34

如果只需要替换,如果存在一个缺失值,则用DataFrame.isnasum创建计数缺失值的掩码,在DataFrame.loc中用fillna创建筛选器

代码语言:javascript
复制
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中替换

代码语言:javascript
复制
m = df.isna() & df.isna().sum().eq(1) 
df = df.mask(m, 0)

代码语言:javascript
复制
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替换了所有缺失的值:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2020-07-03 08:56:56

添加到jezrael的答案中,如果只想在一列中更改值

代码语言:javascript
复制
df['EW'].fillna(0, inplace=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62711656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档