【发布时间】:2017-04-04 16:00:43
【问题描述】:
我有一个 Pandas 数据框,我正在尝试使用 apply() 函数在一列中的条目上传递一个函数。
我的函数是这样的:
def foo(Y):
#accepts a pandas data frame
#carries out some search on the text in each row of the dataframe
#groups successful searches
#return a new column as a pandas series
我的数据框是这样的:
Info WN RN
0 XX YY ZZ
1 AA BB CC
2 JJ KK LL
我尝试执行:
df['SR'] = (df['Info'].apply(foo(x)))
我的错误如下:
File "<ipython-input-11-ae54015436d8>", line 1, in <module>
df['SR'] = (df['Info'].apply(foo(x))
NameError: name 'x' is not defined
但如果我使用:
df['SR'] = (df['Info'].apply(lambda x:foo(x)))
效果很好。
我了解 Lambda 的工作原理(至少我是这么认为的)。我不明白我为什么需要它。
为什么我需要 lambda 才能成功地将函数传递给数据框?根据定义,apply() 函数不应该这样做吗?
或者是我实际上是在以另一种方式有效地执行它,即将我的数据框传递给函数,并返回一些输出,而不是迭代地将函数应用于数据框(如果这有意义的话)?
谁能提供任何见解?
由衷的感谢!
【问题讨论】:
-
在这种情况下,
lambda不是必需的:df['SR'] = df['Info'].apply(foo)可以正常工作 -
您不需要 需要 lambda,但
df['Info'].apply(foo(x))作为语法没有任何意义,因为 x 未定义,您想改为使用(df['Info'].apply(foo)).只需传递apply()函数即可。不要尝试内联编写函数调用。
标签: python pandas lambda apply