首页 > 解决方案 > 使用 Dataframe.apply() 时出现错误:“缺少 1 个必需的位置参数:'row'”

问题描述

我正在尝试通过从使用 iterrows() 切换到使用 apply() 来提高我的股票下单算法(1000 行)的性能,但是我收到了一个错误:

TypeError: ("place_orders() missing 1 required positional argument: 'row'", 'occurred at index 2008-01-14 00:00:00')

下面是我正在阅读的订单文件的示例(为简单起见的简短列表): 订单文件

接下来...下面是我的代码,我尝试实现 apply() 和较慢的 iterrows()

使用 apply 和 iterrows 的代码示例

如果这是一个新手问题,我深表歉意,但我需要使用索引和函数内的行,因为索引是一堆日期。

更新:下面是我的价格表的示例。 在此处输入图像描述

标签: apply

解决方案


当你切换iterrowsapply你需要改变你的心态一点点。而不是循环遍历数据框并将每一行从上到下,您只需指定您希望在每一行中发生的事情。大多数情况下只是放开行号。

因此,在使用时apply,通常最好放弃行号(在您的情况下i)。尝试在您的apply

orders_df.apply(lambda row: place_orders(row), axis=1)

我意识到在您的place_orders函数中,您正在使用prices_table. 为了克服这一部分,您可能希望在调用之前合并数据帧apply,因为apply它并不是真正打算一次处理多个数据帧。

这迫使您重写一些代码,但根据我的经验,您从不使用iterrows中获得的性能提升总是值得的。


推荐阅读