replace() method not working on Pandas DataFrame
Given that this is the top Google result when searching for "Pandas replace is not working" I'd like to also mention that:
replace does full replacement searches, unless you turn on the regex switch. Use regex=True, and it should perform partial replacements as well.
This took me 30 minutes to find out, so hopefully I've saved the next person 30 minutes.
You need to assign back
df = df.replace('white', np.nan)
or pass param inplace=True
:
In [50]:d = {'color' : pd.Series(['white', 'blue', 'orange']), 'second_color': pd.Series(['white', 'black', 'blue']), 'value' : pd.Series([1., 2., 3.])}df = pd.DataFrame(d)df.replace('white', np.nan, inplace=True)dfOut[50]: color second_color value0 NaN NaN 1.01 blue black 2.02 orange blue 3.0
Most pandas ops return a copy and most have param inplace
which is usually defaulted to False
Neither one with inplace=True
nor the other with regex=True
don't work in my case.So I found a solution with using Series.str.replace instead. It can be useful if you need to replace a substring.
In [4]: df['color'] = df.color.str.replace('e', 'E!')In [5]: df Out[5]: color second_color value0 whitE! white 1.01 bluE! black 2.02 orangE! blue 3.0
or even with a slicing.
In [10]: df.loc[df.color=='blue', 'color'] = df.color.str.replace('e', 'E!')In [11]: df Out[11]: color second_color value0 white white 1.01 bluE! black 2.02 orange blue 3.0