如何传递参数以正确应用

2024-10-03 09:13:33 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个api函数

get_next_trading_date(exchange='SZSE', date='2017-05-01')

我有一个数据帧backTestRecordAfterModified,如下所示

enter image description here 当我跑的时候

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'))

上面的代码仍然显示相同的错误。你知道吗

enter image description here

我添加了get_next_trading_date的定义

enter image description here

我刚才得到了最后的答案。你知道吗

backTestRecordAfterModified['createdAt']=backTestRecordAfterModified['createdAt'].apply(lambda date: get_next_trading_date(date=date,exchange='SZSE'))

Tags: 数据lambda函数api消息getdateexchange
3条回答

一种选择是使用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]

apply函数是为pandas系列的每个值调用的,默认情况下,该值作为参数传递给函数。你知道吗

指定的附加参数在序列值之后传递。 在您的示例中,每次函数调用

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)

必须使用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').

相关问题 更多 >