breezymri
breezymri

Reputation: 4353

pandas replace null values for a subset of columns

I have a data frame with many columns, say:

df:
name   salary  age   title
John      100   35    eng
Bill      200  NaN    adm
Lena      NaN   28    NaN
Jane      120   45    eng

I want to replace the null values in salary and age, but no in the other columns. I know I can do something like this:

u = df[['salary', 'age']]
df[['salary', 'age']] = u.fillna(-1)

But this seems terse as it involves copying. Is there a more efficient way to do this?

Upvotes: 20

Views: 32626

Answers (5)

piRSquared
piRSquared

Reputation: 294586

Try this:

subset = ['salary', 'age']
df.loc[:, subset] = df.loc[:, subset].fillna(-1)

Upvotes: 17

haneulkim
haneulkim

Reputation: 4928

I was hoping fillna() had subset parameter like drop(), maybe should post request to pandas however this is the cleanest version in my opinion.

df[["salary", "age"]] = df[["salary", "age"]].fillna(-1)

Upvotes: 5

kris
kris

Reputation: 23601

You can do:

df = df.assign(
    salary=df.salary.fillna(-1),
    age=df.age.fillna(-1),
)

if you want to chain it with other operations.

Upvotes: 2

Muhammad Raihan Muhaimin
Muhammad Raihan Muhaimin

Reputation: 5719

According to Pandas documentation in 23.3

values = {'salary': -1, 'age': -1}
df.fillna(value=values, inplace=True)

Upvotes: 29

xirururu
xirururu

Reputation: 5508

It is not so beautiful, but it works:

df.salary.fillna(-1, inplace=True)
df.age.fillna(-1, inplace=True)
df
>>>    name  salary   age title
    0  John   101.0  35.0   eng
    1  Bill   200.0  -1.0   adm
    2  Lena    -1.0  28.0   NaN
    3  Jane   120.0  45.0   eng

Upvotes: 8

Related Questions