【问题标题】:Replace missing values at once in both categorical and numerical columns在分类列和数值列中一次替换缺失值
【发布时间】:2019-05-19 20:37:31
【问题描述】:

有没有办法同时替换分类列和数值列中的 NAN 值?

一个非常简单的例子:

data = {'col_1': [3, np.nan, 1, 2], 'col_2': ['a', 'a', np.nan, 'd']}
df = pd.DataFrame.from_dict(data)

数据框:

    col_1   col_2
0   3.0     a
1   NaN     a
2   1.0    NaN
3   0.0     d

目标:

col_1mean替换col_1的NAN,用col_2mode ('a')替换col_2的NAN。

现在,我必须为每一列单独替换它。如果所有列都是数字或分类的,那么这很容易,因为该操作可以应用于整个数据框,但我找不到一种方法来为混合数据框做一行。

【问题讨论】:

  • col2 只是objectcategory dtype?
  • @ALollz 在我的实际数据集中,它的category dtype。

标签: python pandas


【解决方案1】:

我会做什么

df.fillna(df.agg(['mean',lambda x : x.value_counts().index[0]]).ffill().iloc[-1,:])
   col_1 col_2
0    3.0     a
1    2.0     a
2    1.0     a
3    2.0     d

【讨论】:

    【解决方案2】:

    mean 仅适用于数字类型,因此请先填充,然后用模式填充余数。

    df.fillna(df.mean()).fillna(df.mode().iloc[0])
    
    #   col_1 col_2
    #0    3.0     a
    #1    2.0     a
    #2    1.0     a
    #3    2.0     d
    

    如果你有平局,模式将是第一个排序的模式。

    【讨论】:

    • 我尝试了另一个不同的数据集,其中分类列具有类型对象,但它不适用于具有类型对象的分类列。你知道为什么会这样吗?现在,我已将对象类型更改为类别,然后它就可以工作了。
    • 我再次尝试重新创建问题,它现在甚至可以使用 dtype 对象。我之前可能在笔记本上搞砸了。
    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 2018-02-17
    • 2020-08-15
    • 1970-01-01
    • 2017-07-19
    • 2023-01-13
    • 2021-09-03
    • 1970-01-01
    相关资源
    最近更新 更多