熊猫系列fillna无法正常工作

时间:2018-03-26 19:57:37

标签: python pandas dataframe fillna

我有一个名为combined的数据框,我试图简单地通过具有null / nan值的列进行迭代并替换它们。我完成此任务的代码如下:

def fix_null_columns():
    null_columns = [col for col in combined.columns if combined[col].isnull().values.any()]

    for col in null_columns:
        try:
            col_mean_or_mode = pd.Series.mean(combined[col])
        except:
            col_mean_or_mode = pd.Series.mode(combined[col])
        combined[col].fillna(col_mean_or_mode, inplace = True)

代码运行正常,但它不会替换原始DF上的任何内容。我一直坚持这个侮辱性的简单任务一天,所以我很感激任何帮助。

我从不同的角度尝试过这个问题。我已确保使用inplace = True。我已确保我的NaN值为np.nan。我只是迷失了为什么这不起作用。谢谢!

编辑添加MCVE:

示例数据框:

>df

index   col1    col2    col3    col4
0       20      1158    1218    NaN
1       21      1108    0       Grvl
2       22      1795    0       NaN
3       23      1060    0       NaN
4       24      1060    0       NaN

col4有分类数据,显然有一些NaN。 pd.Series.mode(df[col4])按预期返回Grvl

然后我定义:

def fix_null_columns():
    null_columns = [col for col in df.columns if df[col].isnull().values.any()]

    for col in null_columns:
        try:
            col_mean_or_mode = pd.Series.mean(df[col])
        except:
            col_mean_or_mode = pd.Series.mode(df[col])
        df[col].fillna(col_mean_or_mode, inplace = True)

然后我运行fix_null_columns()并再次检查我的df:

>df

index   col1    col2    col3    col4
0       20      1158    1218    Grvl
1       21      1108    0       Grvl
2       22      1795    0       NaN
3       23      1060    0       NaN
4       24      1060    0       NaN

这与我之前遇到的情况略有不同,但仍有意外行为。 df [col4]的第一个值发生了变化,其余的NaN保持不变。我很困惑。

所需的输出显然是:

>df

index   col1    col2    col3    col4
0       20      1158    1218    Grvl
1       21      1108    0       Grvl
2       22      1795    0       Grvl
3       23      1060    0       Grvl
4       24      1060    0       Grvl

0 个答案:

没有答案