如何为带参数的函数向Pandas DataFrame的apply方法传参?
解决pandas apply传递带参数函数的报错问题
这个问题我之前也碰到过,核心原因是apply的args参数要求必须是可迭代类型(比如元组、列表),你直接传单个数值5不符合要求,所以触发了'*args must be an iterable'的错误。下面给你几种可行的解决办法:
方法1:将单个参数包装成元组(注意加逗号)
因为单个元素的元组需要用逗号来标识(否则会被当成普通括号包裹的数值),所以把5放进带逗号的元组里传入args:
import pandas as pd def foo(x, activation=3.0): return x * activation # 构造测试DataFrame df = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]}) # 正确传递单个参数到args result = df.apply(foo, args=(5,))
方法2:直接用关键字参数传递(更清晰)
你的函数参数有明确的名称activation,可以直接在apply中通过关键字参数传递,这种方式可读性更强,也不需要纠结可迭代的问题:
# 直接通过关键字参数指定activation的值 result = df.apply(foo, activation=5)
额外说明
如果你的函数有多个位置参数,只需要把所有参数按顺序放进元组即可,比如函数是def foo(x, a, b): return x + a + b,那么可以这样传:
result = df.apply(foo, args=(2, 3))
另外,默认情况下apply的raw=False,此时传给foo的x是pandas.Series对象;如果设置raw=True,x会变成numpy.ndarray,这个根据你的需求调整就行。
内容的提问来源于stack exchange,提问作者Aperion
相关产品推荐
相关产品推荐

