将函数应用于 DataFrame 中的每个单元格
Posted
技术标签:
【中文标题】将函数应用于 DataFrame 中的每个单元格【英文标题】:Apply function to each cell in DataFrame 【发布时间】:2017-01-21 09:44:56 【问题描述】:我有一个可能如下所示的数据框:
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
是否有一个简单的单行程序可以将函数应用于每个单元格?
这是一个简单的示例,因此除了应用函数之外,可能还有一种更简单的方法来执行此特定示例,但我真正要问的是如何在数据框中的每个单元格中应用函数。
【问题讨论】:
我不认为将问题编辑为一个全新的问题是一个好主意,一旦你已经得到了旧问题的答案,因为它会使之前的答案无效。我会要求您回滚原来的问题并单独提出新的问题。 【参考方案1】:您可以使用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
【讨论】:
您好,抱歉,问题是关于应用函数,而不是关于确定哪个单元格是偶数。让我看看我是否可以将示例更改为更清晰.. 如果你正在寻找应用函数,你可以做import numpy as np; df.apply(np.vectorize(iseven))
@eljusticiero67 您可以使用df.applymap(iseven)
,但请注意,对于较大的 DataFrame,它会变得非常慢,所以只要有机会,请使用矢量化方法。
@ayhan -- 你的方法似乎有效,无论有没有 np.vectorize。你介意发布答案,以便我可以给你功劳吗?
我其实一开始并没有发布它,因为我试图找到一个副本来链接它。我找不到完全相同的副本,但也许是this one? Nickil Maveli 是对的,你可以澄清意思,但至少我认为这个例子应该是一样的。也许 Psidom 可以编辑以包含他们自己的建议以及 applymap?【参考方案2】:
我猜你可以使用np.vectorize
:
>>> df[:] = np.vectorize(foo_bar)(df)
>>> df
A B C
foo bar wow bar
bar wow wow bar
>>>
这可能会更快,因为它使用的是numpy
。
【讨论】:
以上是关于将函数应用于 DataFrame 中的每个单元格的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark - 如何将函数仅应用于 DataFrame 中的列子集?
有效地将函数并行应用于分组的 pandas DataFrame