Pandas dataframe fillna() only some columns in place

StackOverflow

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?

Answer rating: 299

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

Answer rating: 123

You can using dict , fillna with different value for different column

df.fillna({"a":0,"b":0})
Out[829]: 
     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

After assign it back

df=df.fillna({"a":0,"b":0})
df
Out[831]: 
     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




Get Solution for free from DataCamp guru