python pandas:将带有参数的函数应用于系列

新手上路,请多包涵

我想将一个带参数的函数应用于 python pandas 中的系列:

 x = my_series.apply(my_function, more_arguments_1)
y = my_series.apply(my_function, more_arguments_2)
...

文档 描述了对 apply 方法的支持,但它不接受任何参数。是否有不同的方法可以接受参数?或者,我是否缺少一个简单的解决方法?

更新(2017 年 10 月): 请注意,由于最初提出此问题,pandas apply() 已更新为处理位置和关键字参数,上面的文档链接现在反映了这一点,并显示了如何包含任何一种类型的参数。

原文由 Abe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 510
2 个回答

较新版本的 pandas 确实 允许您传递额外的参数(请参阅 新文档)。所以现在你可以这样做:

 my_series.apply(your_function, args=(2,3,4), extra_kw=1)

位置参数添加 系列元素之后。


对于旧版本的熊猫:

文档清楚地解释了这一点。 apply 方法接受一个 python 函数,该函数应该有一个参数。如果你想传递更多参数,你应该使用 functools.partial 正如 Joel Cornett 在他的评论中所建议的那样。

一个例子:

 >>> import functools
>>> import operator
>>> add_3 = functools.partial(operator.add,3)
>>> add_3(2)
5
>>> add_3(7)
10

您还可以使用 partial 传递关键字参数。

另一种方法是创建一个 lambda:

 my_series.apply((lambda x: your_func(a,b,c,d,...,x)))

但我认为使用 partial 更好。

原文由 Bakuriu 发布,翻译遵循 CC BY-SA 4.0 许可协议

脚步:

  1. 创建数据框
  2. 创建函数
  3. 在 apply 语句中使用函数的命名参数。

例子

x=pd.DataFrame([1,2,3,4])

def add(i1, i2):
    return i1+i2

x.apply(add,i2=9)

此示例的结果是数据框中的每个数字都将添加到数字 9 中。

     0
0  10
1  11
2  12
3  13

解释:

“add”函数有两个参数:i1、i2。第一个参数将是数据框中的值,第二个参数是我们传递给“应用”函数的任何内容。在这种情况下,我们使用关键字参数“i2”将“9”传递给应用函数。

原文由 FistOfFury 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题