在 DataFrame 中使用 apply 时如何传递参数

How to pass arguments when using apply in DataFrame

我想 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 的吗?

可能解决此问题的最正常方法是使用 .apply**kwds 参数,这在 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. 提供给提供的函数
  4. 对于该函数的每个 return,将其转换为另一个 Pandas 系列。