【问题标题】:How to pass arguments when using apply in DataFrame在 DataFrame 中使用 apply 时如何传递参数
【发布时间】:2021-08-06 07:05:10
【问题描述】:

我想apply 沿一列的函数,例如coco.convert,并将参数to = 'ISO3' 与行中的值一起传递给它。

df['alpha-3'] = df['Country'].apply(coco.convert('ISO3'))

遗漏 1 个位置参数:

TypeError: convert() missing 1 required positional argument: 'names'

但是

df['alpha-3'] = df['Country'].apply(coco.convert)

工作正常(我假设它使用默认值)。

如何在这里传递位置参数?

另外,这里到底发生了什么——有人可以解释一下函数是如何传递给apply的吗?

【问题讨论】:

  • "有人能解释一下函数是如何传递给应用的吗?"你到底有什么不明白的?函数只是一个对象,就像任何其他对象一样,intlistdict 等。它的工作方式完全相同
  • 不管怎样,你有read the documentation for the series .apply的方法吗?有关如何传递其他参数的任何相关信息?
  • 注意,即使没有 TypeError,.apply(coco.convert('ISO3')) 也不会按照您希望的方式工作,它调用函数 coco.convert("ISO3") 并传递 result 到.apply,但.apply 需要一个函数。 (注意,如果 coco.convert 返回一个函数 本身,这 可能 工作,但这不是你所描述的)

标签: python pandas arguments parameter-passing apply


【解决方案1】:

解决这个问题的最常见方法可能是使用**kwds 参数.apply,这在apply documentation 中有介绍。基本上你可以将任何其他命名参数传递给 .apply() 并将它们与传递的函数一起使用。

df['alpha-3'] = df['Country'].apply(coco.convert, to='ISO3')

另一种方法是使用预先传递的参数定义您自己的新函数,如下所示。

def my_fun(x):
    return coco.convert(names = x, to = 'ISO3')

df['alpha-3'] = df['Country'].apply(my_fun)

向您的其他人介绍 .apply 的工作原理...

  1. 获取您提供的数据列,并遍历每个元素
  2. 对于每个元素,将其值作为 *first 输入到提供的函数中
  3. 对于该函数的每次返回,将其转换为另一个 Pandas 系列。

【讨论】:

  • 谢谢,这就是我正在寻找的解释,理解文档时遇到了一些麻烦!非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多