我有一个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)
Run Code Online (Sandbox Code Playgroud)
我收到错误消息
File "<console>", line 1
SyntaxError: Generator expression must be parenthesized if not sole argument
Run Code Online (Sandbox Code Playgroud)
我试图阅读官方文档,但是我很难理解它对args参数的解释http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html
我也尝试过将map_dict作为关键字或位置参数传递,但是我仍然遇到相同的错误
在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)))
Run Code Online (Sandbox Code Playgroud)