【问题标题】:Syntax for Passing Args to a Pandas Dataframe apply function将 Args 传递给 Pandas Dataframe 应用函数的语法
【发布时间】:2016-02-24 18:11:20
【问题描述】:

我的问题在这里: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html#pandas.Series.apply

如果你有

def subtract_custom_value(x, custom_value):
    return x-custom_value

然后

series.apply(subtract_custom_value, args=(5,))

有效,但无效

series.apply(subtract_custom_value, args=(,5))

都没有

series.apply(subtract_custom_value, args=(5))

我不明白他们为什么选择这种语法,因为按照“substract_custom_values”参数的顺序,5 实际上匹配“custom_value”,而不是 x,它是通过“apply”函数提供的“Series”。

因此,我想知道他们为什么选择更改顺序以便 custom_value 在 args 中排在第一位,以及为什么最后需要逗号(不添加它会破坏语法)。

提前致谢

【问题讨论】:

  • 这是因为参数 arg 必须是一个序列,所以你要传递一个元组,而你的 func 的第一个参数是 Series 值,所以看起来很奇怪,如果你传递了 args=([5]) 然后这将在您传递单个元素的序列时起作用,这就是其他 2 次尝试失败的原因,因为 5 不是序列并且 (,5) 与您的参数不匹配,因为您有 2 个 args 但第一个 arg已经是 Series 值,如果您的 func 接受 3 个参数,那么它不会引发错误

标签: python pandas syntax apply


【解决方案1】:

他们没有选择那样的东西。如您链接的文档中所述,args 应该是一个元组。使用元组(或其他类型的可迭代)并且它可能工作,只要其元素的数量和类型是合适的。使用不是可迭代的东西,它不会工作。使用无效的 python 语法,你会得到一个语法错误。 Python 照常营业。

现在谈谈你的例子:

  • (5,) 是一个包含一个元素的元组。
  • (,5) 不是有效的 Python 语法,pandas 对此无能为力。
  • (5) 计算结果为数字,而不是元组。

【讨论】:

  • 我知道它必须是一个元组。实际上,文档说“除了值之外要传递给函数的元组/位置参数”。所以我尝试了一些不是元组的东西来观察 apply 的行为。一旦考虑到 x,元组中的位置就不必反映方法描述中的位置,这一点并不明显。我在想它更像是其他语言中的一些构造函数(我来自java,对不起)。另外,我不习惯这种情况,所以我不知道第二种情况的语法是错误的。 @EdChum 似乎说 (,5) 可能对 3 个参数有效。谢谢
  • 另外,我提出问题并不是为了不尊重 Pandas 的团队。我真的相信他们做出了编码选择,并且由于库中的所有内容都非常正式且合乎逻辑,这让我感到困惑。
  • 我没有认为你的问题是不尊重的,如果我听起来像那样的话,对不起。我只是想澄清语法是语言定义的一部分,库作者对此没有发言权。我想我的观点不够清楚。
  • 对于那些因为我的语气不清楚而可能对这个问题投反对票的人来说,这并不是为了向你解释这一点。我很高兴你帮助了我,事实上。我知道很多语言(我从来没有被正式教过,所以我会在需要时抓住/学习有用的东西,因为缺乏时间和需要强大的工具)但仍然有很大的空间来精通就我自己而言,这有时会导致这样的审讯。
猜你喜欢
  • 2021-12-27
  • 2021-05-01
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多