Python 立即替换类别列和数字列中缺少的值

Python 立即替换类别列和数字列中缺少的值,python,pandas,Python,Pandas,是否有一种方法可以同时替换分类列和数字列中的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 目标: 将列1的NAN替换为列1的平均值,将列2的N

是否有一种方法可以同时替换分类列和数字列中的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
目标:

列1
的NAN替换为
列1
平均值
,将
列2
的NAN替换为
列2
模式('a')


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

mean
仅适用于数字类型,因此先填充该类型,然后用mode填充其余部分

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
如果您有领带,则模式将是首先排序的模式

我要做什么

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

col2
只是
object
还是
category
dtype?@ALollz在我的实际数据集中,它的
category
dtype。我尝试了另一个不同的数据集,其中分类列有一个type对象,而它对具有type对象的分类列不起作用。你知道为什么会这样吗?现在,我已经将对象类型更改为category,然后它就可以工作了。我再次尝试重新创建该问题,现在它甚至可以与dtype对象一起工作。我之前可能把笔记本里的东西弄乱了。