【问题标题】:Why do I need lambda to apply functions to a Pandas Dataframe?为什么我需要 lambda 才能将函数应用于 Pandas Dataframe?
【发布时间】: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


【解决方案1】:

lambda 是不必要的,你可以这样做

df['SR'] = df['Info'].apply(foo)

在这里它仍然可以工作

【讨论】:

  • 这很奇怪。因为当我在这里做同样的事情时,它不会。为了清楚起见,我将用完整的 foo 内容更新我的 Q。
  • 我很抱歉:你是对的。这确实解决了问题。我的下一个问题是为什么需要 lambda? (但也许这是一个更普遍的问题,适合其他地方)
  • 要理解的是lambda 只是普通函数定义的语法糖:docs.python.org/3/tutorial/controlflow.html#lambda-expressions,它们有一个限制,只能接受一个 arg,这取决于个人喜好老实说,lambda 不会做普通 func 做不到的事情
  • 欣赏链接。我将围绕 SO 上的其他一些问题进行阅读和讨论,以感受一下。感谢您的帮助。
猜你喜欢
  • 2021-05-21
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
相关资源
最近更新 更多