apply - 使用 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()
如果这是一个新手问题,我深表歉意,但我需要使用索引和函数内的行,因为索引是一堆日期。
解决方案
当你切换iterrows
到apply
你需要改变你的心态一点点。而不是循环遍历数据框并将每一行从上到下,您只需指定您希望在每一行中发生的事情。大多数情况下只是放开行号。
因此,在使用时apply
,通常最好放弃行号(在您的情况下i
)。尝试在您的apply
:
orders_df.apply(lambda row: place_orders(row), axis=1)
我意识到在您的place_orders
函数中,您正在使用prices_table
. 为了克服这一部分,您可能希望在调用之前合并数据帧apply
,因为apply
它并不是真正打算一次处理多个数据帧。
这迫使您重写一些代码,但根据我的经验,您从不使用iterrows
中获得的性能提升总是值得的。
推荐阅读
- c# - 在 Visual Studio 中发布 WFA - 目标框架问题
- c# - Autofac 填充方法在运行时失败
- anylogic - 在实验中使用单选按钮编辑 main 中的参数
- c# - asp.net c# 在标签中显示数据 - System.Web.UI.WebControls.Label
- python - 如何在列中获取真值和侧翼假值
- python - 无法在 python SQLAlchemy 中执行多处理
- vba - 如何将格式化段落从 Word 2013 复制到 Excel?
- mysql - 自动化 Toad Edge 查询以运行并通过电子邮件发送结果
- java - new WordDocument() com.independentsoft 的异常
- firebase - 查询对象的firestore数组