将函数应用于DataFrame中的每个单元格


87

我有一个数据框可能看起来像这样:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

我想浏览每行的每个元素(或每列的每个元素)并应用以下函数来获取后续的DF:

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

是否有可以将功能应用于每个单元的简单单线?

这是一个简单的示例,因此除了应用函数外,可能还有一种更简单的方法来执行此特定示例,但是我真正要问的是如何在数据帧内的每个单元中应用函数。


9
我认为将问题编辑为一个全新的问题不是一个好主意,因为一旦您已经获得了对旧问题的答案,这将使先前的答案无效。我将要求您回滚原来的问题,并单独询问新问题。
Nickil Maveli

Answers:


119

您可以使用applymap()简洁明了的案例。

df.applymap(foo_bar)

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

另一个选择是向量化您的函数,然后使用apply方法:

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

您好,对不起,问题是关于应用一个函数,而不是实际上弄清楚哪个单元是偶数。让我看看是否可以将示例更改得更清楚
。–

1
如果您正在寻找应用功能的话,可以做import numpy as np; df.apply(np.vectorize(iseven))
Psidom

2
@ eljusticiero67可以使用,df.applymap(iseven)但请注意,对于较大的DataFrame,它会变得非常缓慢,因此,只要有机会,请使用向量化方法。
ayhan

@ayhan-无论是否使用np.vectorize,您的方法似乎都可以使用。您介意发布答案,以便我给您功劳吗?
eljusticiero67

1
实际上我一开始并没有发布它,因为我试图找到一个重复的链接。我找不到确切的重复项,但也许这个吗?尼克·马维利(Nickil Maveli)是对的,尽管您可以澄清含义,但至少示例与我想的相同。也许Psidom可以进行编辑以将自己的建议与applymap一起包含?
ayhan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.