【问题标题】:Faster Alternative to Iteration of Appending of Python ArrayPython 数组追加迭代的更快替代方案
【发布时间】:2021-10-21 11:45:48
【问题描述】:

我正在处理长度为 1,000-10,000 个元素的数组,它们都具有相同的长度。

我需要返回一个数组(在下面的示例代码中称为“点”),它在数组的每个元素中都包含一个字典。

我一直在寻找与 .loc 方法类似的方法,可用于为 pandas 数据框中的列创建规则,但仍未找到不涉及迭代附加数组的解决方案 I需要退货。

非常感谢您的解决方案!

当前代码:

times = [000000001,000034000,...]
highs = [2,1,...]
lows = [-2,-3,...]

points = []
for i in range(0, len(times)):
    points.append({"time": times[i], "low": lows[i], "high": highs[i]})

评论建议的解决方案:

import pandas as pd
df = pd.DataFrame({"time": times,"low":lows,"high":highs})

看起来像:

Time    High    Low
0   100000001   1   -1
1   100000002   3   -4
2   100000003   4   -5

已经咨询过的 SE 帖子:

Iteratively appending ndarray arrays using numpy in Python

Alternative/faster ways of creating arrays in python 2.7

iterate list of dictionary and append python

【问题讨论】:

  • 将这 3 个数组转换为一个数据框,其中每个点都是一行对您不起作用?
  • 同意,听起来你需要一个 pandas DataFrame。
  • @JuanC 我已经将它们放在一个数据框中(添加到帖子中),但我一直坚持如何在不迭代的情况下“逐行”将字典放在一起
  • @jros 你能解释一下为什么你想要每行都有一个字典吗?这是一个非常低效的表示。使用 pandas 和 numpy,您可以通过保留少量数组而不是大量纯 Python 对象来解决 Python 的缓慢问题。库使低效的东西不方便输入是很常见的(也是好的)。如果你真的需要那个表示,那么你只需要编写一个循环。想要它可能有充分的理由,但最好先检查它是否真的需要。
  • @MrFoozm 字典格式只是因为它需要以json格式输出

标签: python arrays dictionary


【解决方案1】:

您可以使用列表推导将速度提高大约 40%:

points = [{"time":T,"low":L,"high":H} for T,L,H in zip(times,lows,highs)]

【讨论】:

  • 我赞成这个答案,因为它确实节省了一些时间(如你所说,可能大约 40%),希望在接受之前看看其他可能的解决方案
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 2012-07-05
  • 2012-01-23
  • 2013-07-13
  • 2011-02-27
  • 2010-09-22
  • 2017-05-15
相关资源
最近更新 更多