Python Pandas Replace Special Character

pandas, python, tilde

Solution

I'm assuming you're using Python 2.x here and this is likely a Unicode problem. Don't worry, you're not alone--unicode is really tough in general and especially in Python 2, which is why it's been made standard in Python 3.

If all you're concerned about is the `ñ`, you should decode in UTF-8, and then just replace the one character.

That would look something like the following:

DF['name'] = DF['name'].str.decode('utf-8').replace(u'\xf1', 'n')

As an example:

>>> "sureño".decode("utf-8").replace(u"\xf1", "n")
u'sureno'

If your string is already Unicode, then you can (and actually have to) skip the `decode` step:

>>> u"sureño".replace(u"\xf1", "n")
u'sureno'

Note here that `u'\xf1'` uses the hex escape for the character in question.

Update

I was informed in the comments that `<>.str.replace` is a pandas series method, which I hadn't realized. The answer to this possibly might be something like the following:

DF['name'] = map(lambda x: x.decode('utf-8').replace(u'\xf1', 'n'), DF['name'].str)

or something along those lines, if that pandas object is iterable.

Another update

It actually just occurred to me that your issue may be as simple as the following:

DF['NAME']=DF['NAME'].str.replace(u"ñ","n")

Note how I've added the `u` in front of the string to make it unicode.

Problem

For some reason, I cannot get this simple statement to work on the `ñ`. It seems to work on anything else but doesn't like that character. Any ideas? ``` DF['NAME']=DF['NAME'].str.replace("ñ","n") ``` Thanks

Original source