如何创建数千个变量而不是使用DataFrame(太慢)?

时间:2019-02-25 00:12:44

标签: python python-3.x pandas

问题

如何创建数千个变量而不是使用DataFrame?用

更新元素
df1.loc[a,b] = df1.loc[a,b] + update_term

太慢了!

当前情况

  1. 在一个数据框中,我有445个美国公司的2500天的历史价格。 (2500行* 445列DataFrame)
  2. 我要使用这些股票价格计算的是下面显示的等式的3个参数。
    enter image description here
    由于每个445家公司都有一个 k ,b k (每个445个),并且445个公司对具有w j,k 个参数(总计(445 * 444)/ 2),有有这么多变量要创建。

  3. 要制作上述参数所需的变量,我制作了3个数据框,其中2个是a k ,b 的1 * 445尺寸(1行,445列) w j,k 的k 和445 * 445维。屏幕截图如下所示。 enter image description here

  4. 由于我使用df.loc函数(如

  5. )为每个公司更新了参数

parameter = parameter + df.loc[date,'company_name']

我的代码太慢了!

下面是我代码中的一个真实示例。

A_random_parameter = df1.loc['row_index_1',company_x] +
    df2.loc['row_index_2',company_x] *
    df3.loc[date,'company_y']

有人建议创建数千个变量而不是使用类似DataFrame的方式吗?

2 个答案:

答案 0 :(得分:0)

事实证明,正如John Zwinck所建议的那样,使用字典比使用DataFrame存储变量要快得多。谢谢!

答案 1 :(得分:0)

使用数组

如果您需要像方程式所示那样运行矩阵计算,则需要使用具有快速随机元素访问和连续内存布局的数据结构。在python中,执行此操作的标准方法是使用numpy数组(https://docs.scipy.org/doc/numpy-1.16.1/reference/generated/numpy.array.html

此外,在任何您关心性能的此类操作中,不要都希望执行python循环并分别访问/更新每个元素。如果正在使用pandas数据帧,则不会;如果正在使用numpy数组,则不会;如果正在使用tensorflow或其他任何方法,则不会。相反,您希望对操作进行“向量化”,即使用“一次”对整个向量或矩阵进行处理的基本操作,以便适当的库可以在可能的情况下有效地并行化其执行。 NumPy Basics: Arrays and Vectorized Computation可能是相关的。