有一个api函数
get_next_trading_date(exchange='SZSE', date='2017-05-01')
我有一个数据帧backTestRecordAfterModified
,如下所示
backTestRecordAfterModified['createdAt']=backTestRecordAfterModified['createdAt'].apply(func=get_next_trading_date, exchange='SZSE')
控制台显示消息:TypeError: get_next_trading_date() got multiple values for argument 'exchange'
那么,如何正确传递参数呢
补充
backTestRecordAfterModified['createdAt'] = backTestRecordAfterModified['createdAt'].apply(lambda date: get_next_trading_date(date, exchange='SZSE'))
上面的代码仍然显示相同的错误。你知道吗
我添加了get_next_trading_date
的定义
我刚才得到了最后的答案。你知道吗
backTestRecordAfterModified['createdAt']=backTestRecordAfterModified['createdAt'].apply(lambda date: get_next_trading_date(date=date,exchange='SZSE'))
一种选择是使用
df.apply
而不是series.apply
:或者,如果不想传递整个数据帧:
apply函数是为pandas系列的每个值调用的,默认情况下,该值作为参数传递给函数。你知道吗
指定的附加参数在序列值之后传递。 在您的示例中,每次函数调用
但是在函数中,第一个参数是
exchange
,因此<i-th value of the series>
(当前日期)被传递给exchange
,然后还有另一个关键字参数试图设置相同的变量。这会导致错误。更多关于here。你知道吗你有两个选择。你知道吗
a)更改函数定义以
date
作为第一个参数,这样就不必更改函数调用。但是一定要在调用这个函数的任何地方进行更改。你知道吗b)将函数调用更改为传递日期作为第二个参数。你知道吗
或者简化为
必须使用lambda函数将附加参数传递给
get_next_trading_date()
函数:pandas.Series.apply()
函数实际上支持函数的其他关键字参数,但函数的第一个参数始终是pandas序列中的值。你知道吗如果
get_next_trading_date()
的定义不同,参数顺序相反:你本可以用
相关问题 更多 >
编程相关推荐