【问题标题】:Efficiently Load Large Amounts of Data into Dataframe有效地将大量数据加载到 Dataframe 中
【发布时间】:2020-08-11 14:18:53
【问题描述】:

有没有办法提高效率?假设TimeStart = 0TimeEnd = 9,000,000 id 有一个非常长的范围来迭代并加载到我的数据框中。我正在阅读有关制作数据字典然后将字典一次性加载到数据框中的信息。我真的不知道如何用我正在做的事情来完成这项工作。该代码目前正在将每一行附加到数据帧中,效率非常低。

for i in range(TimeStart,TimeEnd,50):
    chValue = objChannel.getInterpolatedValue(i)
    time = i/10000
    df = df.append({'Time': time, 'Speed': chValue} , ignore_index=True)

【问题讨论】:

  • 什么是objChannel.getInterpolatedValue
  • @Yo_Chris 我这边的东西。为了这个问题,chValue 可以是任意值。
  • 对于初学者来说,您只是自己附加一个值,而不是将其保存在任何容器中?
  • @Datanovice 没有使用任何容器。当前每次迭代都附加到数据帧。
  • df = df.append(...) 是 O(N^2),因为您在 ith 迭代中复制 i-1 行。尝试先创建一个列表字典,然后将其传递给数据框。

标签: python pandas


【解决方案1】:

列表理解肯定会更快:

TimeStart = 0
TimeEnd = 100000

l = [[i/10000, objChannel.getInterpolatedValue(i)] for i in range(TimeStart,TimeEnd,50)]
df = pd.DataFrame(l, columns=['Time', 'Speed'])


# %%timeit 1.99 ms ± 156 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

当我只返回 i 而不是 objChannel.getInterpolatedValue(i) 时,将 TimeEnd 设置为 9000000 每个循环运行 125 毫秒 ± 6.18 毫秒(平均值 ± 标准偏差,共 7 次运行,每个循环 10 次)。例如,l = [[i/10000, i] for i in range(TimeStart,TimeEnd,50)]

【讨论】:

    猜你喜欢
    • 2022-06-30
    • 2021-04-11
    • 2011-06-02
    • 2018-08-05
    • 2020-08-30
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多