将附加参数传递给Python pandas DataFrame apply函数

7

我有一个DataFrame df,我尝试迭代每一行,将两列的值映射为新值,但我在将包含映射的字典传递给df.apply时遇到了问题。

df.apply(lambda row: (map_dict[row['colA']], map_dict[row['colB']]), axis=1, args=(map_dict,), map_dict=map_dict)

我收到了错误信息。
File "<console>", line 1
SyntaxError: Generator expression must be parenthesized if not sole argument

我尝试阅读官方文档,但我很难理解对args参数的解释:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

我也试过将map_dict作为关键字参数或位置参数传入,但仍然出现相同的错误。


@Micheal,请提供完整的堆栈跟踪吗?仅从单行错误很难找到问题。 - Nilesh
如果只执行 df[['colA','colB']].apply(map_dict),它能正常工作吗? - EdChum
@Lafada 这是我得到的唯一错误消息 - Michael
1个回答

6
< p >给 apply 函数传递的 args 参数被传递给了 func 参数(即所给的 lambda 函数)。由于 lambda 函数只接受一个参数,但给出了两个参数,因此出现了这个错误。希望这个例子能帮到你。
import pandas as pd
df = pd.DataFrame({'a':range(100,110), 'b':range(200, 210)})

def modulo(x, n=5):
    return x%n

some_dict = {0: 'a', 1:'b', 2:'c', 3:'d', 4:'e'}
print(df.apply(lambda row,n, map_dict: (map_dict[modulo(row['a'],n)], map_dict[modulo(row['b'],n)]), axis=1, args=(5, some_dict)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接