均值插补后DataFrame出现None和NaN问题求助
问题分析与解决
错误原因拆解
第一种方法的问题
- 先执行
df.replace(np.nan,0, inplace=True )已经把所有NaN替换成了0,后续fillna找不到任何NaN可以填充,完全没必要再执行填充操作。 - 同时使用
df['col1'] = ...和inplace=True是错误的:当fillna设置inplace=True时,它会直接修改原DataFrame的列,返回值是None,这时候把None赋值给df['col1'],就会导致整列变成NaN。
第二种方法的问题
同样犯了「同时赋值+inplace=True」的错误:fillna加inplace=True后返回None,你把这个None赋值给df['col1'],自然整列变成None。
正确的均值填充方法
你只需要二选一即可:
方式1:不使用inplace,直接赋值
# 直接对col1和col2填充均值,不需要先替换0 df['col1'] = df['col1'].fillna(df['col1'].mean()) df['col2'] = df['col2'].fillna(df['col2'].mean())
方式2:使用inplace,不赋值
# 直接修改原列,无需赋值 df['col1'].fillna(df['col1'].mean(), inplace=True) df['col2'].fillna(df['col2'].mean(), inplace=True)
批量填充两列的简化写法
如果要同时处理两列,还可以用更简洁的方式:
df[['col1', 'col2']] = df[['col1', 'col2']].fillna(df[['col1', 'col2']].mean())
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

