在 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 的工作原理...
- 获取您提供的数据列,并遍历每个元素
- 对于每个元素,将其值作为 *first
提供给提供的函数
- 对于该函数的每个 return,将其转换为另一个 Pandas 系列。
我想 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 的工作原理...
- 获取您提供的数据列,并遍历每个元素
- 对于每个元素,将其值作为 *first 提供给提供的函数
- 对于该函数的每个 return,将其转换为另一个 Pandas 系列。