我有一个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()函数不应该按照定义吗?
或者我是否正在以相反的方式实现它,即将我的数据帧传递给函数,并返回一些输出,而不是迭代地将函数应用于数据框(如果这是有意义的)?
任何人都可以提供任何见解吗?
衷心的感谢!
答案 0 :(得分:2)
lambda是不必要的,你可以做到
df['SR'] = df['Info'].apply(foo)
这里仍然可以使用