微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用mode()填充NAN数据不起作用-Pandas

我有一个数据集,其中有一个名为Outlet_Size的系列,其中包含{‘Medium’,nan,’High’,’Small’}大约2566条记录丢失,所以我想用mode()值填充它我写了这样的东西:

  train['Outlet_Size']=train['Outlet_Size'].fillna(train['Outlet_Size'].dropna().mode()]

但是当我试图通过命令找到失踪的NaN记录数量

  sum(train['Outlet_Size'].isnull()) 

它仍然显示2566 NaN记录.为什么会这样?

谢谢你的回答

解决方法:

这里的问题是模式返回一个系列,如果我们看一个简单的例子,这会导致fillna失败:

In [194]:    
df = pd.DataFrame({'a':['low','low',np.NaN,'medium','medium','medium','medium']})
df

Out[194]:
        a
0     low
1     low
2     NaN
3  medium
4  medium
5  medium
6  medium

In [195]:    
df['a'].fillna(df['a'].mode())

Out[195]:
0       low
1       low
2       NaN
3    medium
4    medium
5    medium
6    medium
Name: a, dtype: object

因此,如果我们查看返回的模式,您可以看到它在上面失败:

In [196]:    
df['a'].mode()

Out[196]:
0    medium
dtype: object

它是一个系列,虽然只有一行,所以当你把它传递给fillna它只填充第一行,所以你想要的是通过索引到系列来获得标量值:

In [197]:    
df['a'].fillna(df['a'].mode()[0])

Out[197]:
0       low
1       low
2    medium
3    medium
4    medium
5    medium
6    medium
Name: a, dtype: object

编辑

关于是否需要dropna,不是不是:

In [204]:
df = pd.DataFrame({'a':['low','low',np.NaN,'medium','medium','medium','medium',np.NaN,np.NaN,np.NaN,np.NaN]})
df['a'].mode()

Out[204]:
0    medium
dtype: object

您可以看到NaN被忽略

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐