将其他参数传递给python pandas DataFrame适用

时间:2015-09-07 11:20:07

标签: python pandas

我有一个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作为关键字或位置参数传递,但我仍然得到相同的错误

1 个答案:

答案 0 :(得分:4)

给应用函数的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)))