gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:02 25 4
gpt4 key购买 nike

我有一个数据集,其中有一个名为 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 记录。为什么会这样?

谢谢解答

最佳答案

这里的问题是 mode 返回一个系列,这导致 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

所以你可以看到它在上面失败了,如果我们看一下 mode 返回的内容:

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 被忽略了

关于python - 用 mode() 填充 NAN 数据不起作用-Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38223579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com