我想在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()已被更新为处理位置和关键字参数,上面的文档链接现在反映了这一点,并展示了如何包括这两种类型的参数。
你只需要在参数后添加逗号,然后你就可以在整个列表上运行函数。示例如下。在片场也可以这么做。
df = {"name" : [2,3,4,6],
"age" : [4,10, 30, 20]
}
print("Before")
df = pd.DataFrame(df)
print(df)
def fun(a, b):
for c in b:
a +=c
return a
[![enter image description here][1]][1]
listt = set([3,4,5])
print("After")
new = df.apply(fun, args = (listt,))
print(new)
步骤:
创建一个数据框架
创建一个函数
在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。第一个参数是数据帧中的值,第二个参数是传递给apply函数的值。在本例中,我们使用关键字参数“i2”将“9”传递给apply函数。
新版本的pandas允许传递额外的参数(请参阅新文档)。现在你可以这样做:
my_series.apply(your_function, args=(2,3,4), extra_kw=1)
位置参数被添加到序列的元素之后。
老版本的熊猫:
文档清楚地解释了这一点。apply方法接受一个python函数,该函数应该只有一个参数。如果你想传递更多的参数,你应该使用functools。正如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更好。
你只需要在参数后添加逗号,然后你就可以在整个列表上运行函数。示例如下。在片场也可以这么做。
df = {"name" : [2,3,4,6],
"age" : [4,10, 30, 20]
}
print("Before")
df = pd.DataFrame(df)
print(df)
def fun(a, b):
for c in b:
a +=c
return a
[![enter image description here][1]][1]
listt = set([3,4,5])
print("After")
new = df.apply(fun, args = (listt,))
print(new)