【发布时间】:2021-01-30 14:42:04
【问题描述】:
我有一个大的 for 循环来计算许多变量,最终我想将这些变量存储在 Pandas 多索引数据框中。循环的每一步,我都需要写入数据帧的一部分。数据帧有两个行索引和许多列。每个操作都需要写入一个切片,定义为:所有顶部索引、一个特定的第二个索引和一个特定的列。下面是一个操作示例。
import numpy as np
import pandas as pd
n_paths = 1000
pathgrid=np.arange(1, n_paths + 1)
dt = 0.25
T = 40
timegrid = np.arange(0, T + dt, dt)
multiindex = pd.MultiIndex.from_product([pathgrid, timegrid], names=['Path', 'Timestep'])
df=pd.DataFrame(index=multiindex,columns=['Values'])
input = np.random.random_sample(n_paths)
i=0
%timeit df.loc[(pathgrid,i),'Values'] = input
868 ms ± 8.09 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
我发现这非常慢,这使得我的总运行时间非常慢,因为该操作需要执行数百次。有没有更快的方法来使用 Pandas 做到这一点?我知道的唯一选择是将值存储在单独的 Numpy 数组中,并在循环后将 Numpy 数组写入数据帧。但这意味着我必须创建大量这些临时数组
【问题讨论】:
-
我觉得上面不是原代码,所以不能给推荐。例如,我不确定数据帧是否写入文件。但是,您提到“数据帧有两个行索引和许多列”,那么我们应该期望它需要更多的内存和时间来操作。建议你在内存更大的电脑上测试你的代码。
-
这不是内存问题,我有足够的可用内存用于此操作