有api功能
get_next_trading_date(exchange='SZSE', date='2017-05-01')
我有一个DataFrame 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'))
答案 0 :(得分:1)
您必须使用lambda函数将附加参数传递给get_next_trading_date()
函数:
backTestRecordAfterModified['createdAt']=backTestRecordAfterModified['createdAt'].apply(lambda date: get_next_trading_date(date=date, exchange='SZSE'))
pandas.Series.apply()
函数实际上支持函数的其他关键字参数,但函数的第一个参数始终是pandas系列的值。
如果 get_next_trading_date()
的定义不同,则参数的顺序颠倒过来:
get_next_trading_date_2(date='2017-05-01', exchange='SZSE')
你可以用
backTestRecordAfterModified['createdAt']=backTestRecordAfterModified['createdAt'].apply(func=get_next_trading_date, exchange='SZSE').
答案 1 :(得分:0)
为pandas系列的每个值调用apply函数,默认情况下,该值作为参数传递给函数。
您指定的其他参数将在系列值之后传递。 所以在你的例子中,每次函数调用都是
get_next_trading_date(<i-th value of the series>, exchange='SZSE')
但是在你的函数中,第一个参数是exchange
,所以<i-th value of the series>
(当前日期)传递给exchange
,然后又有另一个关键字参数试图设置相同的变量。这会导致错误。更多here。
这里有两个选项。
a)更改函数定义以将date
作为第一个参数,这样您就不必更改函数调用。但是请确保在您调用此功能的任何地方进行更改。
get_next_trading_date(date='2017-05-01', exchange='SZSE')
b)将您的函数调用更改为传递日期作为第二个参数。
backTestRecordAfterModified['createdAt'] = backTestRecordAfterModified['createdAt'].apply(lambda date: get_next_trading_date(date, exchange='SZSE'))
或简化为,
backTestRecordAfterModified['createdAt'].apply(lambda date: get_next_trading_date(date, exchange='SZSE'), inplace=True)
答案 2 :(得分:0)
一种选择是使用df.apply
代替series.apply
:
df['createdAt'] = df.apply(lambda row: get_date(row['createdAt'], 'SZSE'), axis=1)
或者,如果您不想传递整个数据帧:
df['createdAt'] = [get_date(x, 'SZSE') for x in df['createdAt'].values]