Pandas dataframe fillna() only some columns in place

I am trying to fill none values in a Pandas dataframe with 0's for only some subset of columns.

When I do:

    import pandas as pd
    df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
    print df
    df.fillna(value=0, inplace=True)
    print df

The output:

         a    b    c
    0  1.0  4.0  NaN
    1  2.0  5.0  NaN
    2  3.0  NaN  7.0
    3  NaN  6.0  8.0
         a    b    c
    0  1.0  4.0  0.0
    1  2.0  5.0  0.0
    2  3.0  0.0  7.0
    3  0.0  6.0  8.0

It replaces every None with 0's. What I want to do is, only replace Nones in columns a and b, but not c.

What is the best way of doing this?

You can select your desired columns and do it by assignment:

    df[['a', 'b']] = df[['a','b']].fillna(value=0)

The resulting output is as expected:

         a    b    c
    0  1.0  4.0  NaN
    1  2.0  5.0  NaN
    2  3.0  0.0  7.0
    3  0.0  6.0  8.0

From: stackoverflow.com/q/38134012

Back to homepage or read more recommendations: