python - 更新单个数据帧行中的多列的最有效方法
问题描述
line_profiler 向我展示了令人惊讶的(对我而言)结果,即更新单行中的两列作为两个语句而不是一个组合语句执行得更快。
Line # Hits Time Per Hit % Time Line Contents
==============================================================
696 6907 42029943.0 6085.1 4.7 df_work.loc[self.iRow, 'status'] = 'X'
697 6907 68856814.0 9969.1 7.7 df_work.loc[self.iRow, 'clock'] = self.dClock
698 6907 178155598.0 25793.5 19.9 df_work.loc[self.iRow, ['status', 'clock']] = ['L', self.dClock]
第 696 行和第 697 行合计耗时 11 秒,而等效的第 698 行耗时 18 秒,因此 2 个单独的更新比单个更新语句快 40%。我反复看到这种模式。我假设单个更新会运行得更快,在我恢复我的代码之前,我想检查是否有一种更有效的方法可以在一行中一次更新一列。谢谢!
解决方案
经过未来的研究,解决方案是切换到 iat 而不是 loc。
Line # Hits Time Per Hit % Time Line Contents
==============================================================
673 6907 5209397.0 754.2 1.7 df_work.iat[self.iRow, cols_work['clock']] = self.dClock
每次命中时间从 9969 减少到 754。
我初始化了字典,将列名转换为列号,以便与 iat 一起使用,如下所示:
cols_work = {}
for col in df_work.columns:
cols_work[col] = len(cols_work)
推荐阅读
- c# - 需要不同的模型类型,ASP.NET MVC
- java - 无空指针异常从 Map 的 Map 中获取值
- android - 命令以错误代码 0 完成:adb -s,emulator-5554,shell,ps
- c++ - c ++中的平衡括号
- python - 正则表达式匹配数据框python中字符串对应值的一部分
- r - 在绘图 R 中添加文本
- snowflake-cloud-data-platform - 通过 Snowflake 中的存储过程在表中插入数据时插入 LAST_QUERY_ID 值
- django - 如何在单个 POST 请求中保存多个对象
- ios - iOS 13如何检查用户只给予始终允许位置权限
- google-cloud-platform - GCP 计算引擎实例随机终止