user7146708
user7146708

Reputation: 197

pandas not modifying df

new to pandas here. I have a df:

inked=tracker[['A','B','C','D','AA','BB','CC', 'DD', 'E', 'F']]

single letter column names contain names and double letter column names contain numbers but also NaN.

I am converting all NaN to zeros by using this:

inked.loc[:,'AA':'DD'].fillna(0)

and it works, but when I do

inked.head()

I get the original df with the NaN. How can I make the change permanently in the df?

Upvotes: 0

Views: 62

Answers (2)

Tim Johns
Tim Johns

Reputation: 540

By default, fillna() is not performed in place. If you were operating directly on the DataFrame, then you could use the inplace=True argument, like this:

inked.fillna(0, inplace=True)

However, if you first select a subset of the columns, using loc, then the results are lost.

This was covered here. Basically, you need to re-assign the updated DataFrame back to the original DataFrame. For a list of columns (rather than a range, like you originally tried), you can do this:

inked[['AA','DD']] = inked[['AA','DD']].fillna(0)

Upvotes: 1

Connor Watson
Connor Watson

Reputation: 115

In general when performing dataframe operations, when you want to alter a dataframe you either need to re-assign it to itself, or to a new variable. (In my experience at least)
inked = inked.loc[:,'AA':'DD'].fillna(0)

Upvotes: 0

Related Questions