I have a dataframe where for one column I want to fill null values with the index value. What is the best way of doing this?
Say my dataframe looks like this:
>>> import numpy as np
>>> import pandas as pd
>>> d=pd.DataFrame(index=['A','B','C'], columns=['Num','Name'], data=[[1,'Andrew'], [2, np.nan], [3, 'Chris']])
>>> print d
  Num    Name
A    1  Andrew
B    2     NaN
C    3   Chris
I can use the following line of code to get what I'm looking for:
d['Name'][d['Name'].isnull()]=d.index
However, I get the following warning: "A value is trying to be set on a copy of a slice from a DataFrame"
I imagine it'd be better to do this either using fillna or loc, but I can't figure out how to do this with either. I have tried the following:
>>> d['Name']=d['Name'].fillna(d.index)
>>> d.loc[d['Name'].isnull()]=d.index
Any suggestions on which is the best option?
Definition and Usage. The fillna() method replaces the NULL values with a specified value. The fillna() method returns a new DataFrame object unless the inplace parameter is set to True , in that case the fillna() method does the replacing in the original DataFrame instead.
IMO you should use fillna, as the Index type is not an acceptable data type for the fill value you need to pass a series. Index has a to_series method:
In [13]:
d=pd.DataFrame(index=['A','B','C'], columns=['Num','Name'], data=[[1,'Andrew'], [2, np.nan], [3, 'Chris']])
d['Name']=d['Name'].fillna(d.index.to_series())
d
Out[13]:
   Num    Name
A    1  Andrew
B    2       B
C    3   Chris
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With