Apply function to each cell in DataFrame

PythonPandasDataframeApply

Python Problem Overview


I have a dataframe that may look like this:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

I want to look through every element of each row (or every element of each column) and apply the following function to get the subsequent DF:

def foo_bar(x):
    return x.replace('foo', 'wow')

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Is there a simple one-liner that can apply a function to each cell?

This is a simplistic example so there may be an easier way to execute this specific example other than applying a function, but what I am really asking about is how to apply a function in every cell within a dataframe.

Python Solutions


Solution 1 - Python

You can use applymap() which is concise for your case.

df.applymap(foo_bar)

#     A	      B	      C
#0	wow	    bar	wow bar
#1	bar wow	wow	    bar

Another option is to vectorize your function and then use apply method:

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A	      B	      C
#0	wow	    bar	wow bar
#1	bar wow	wow	    bar

Solution 2 - Python

I guess you could use np.vectorize:

>>> df[:] = np.vectorize(foo_bar)(df)
>>> df
       A    B    C
foo  bar  wow  bar
bar  wow  wow  bar
>>> 

This might be quicker, since it's using numpy.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questioneljusticiero67View Question on Stackoverflow
Solution 1 - PythonPsidomView Answer on Stackoverflow
Solution 2 - PythonU12-ForwardView Answer on Stackoverflow