我发现在熊猫中选择行的速度相当慢。
我有一个df
,其日期时间超过20k
作为索引,50
列。
以下是我要做的事情:
for d in reversed(df.index):
whatever_value = calculate()
start = time.time()
df.ix[d] = whatever_value
print time.time()-start
我尝试了df.ix[d]
,每次约需50 ~ 60 ms (printed out as above)
次。所以总共需要20k * 0.055 =~ 1100 seconds
为了避免使用datetime
进行选择,我还使用了顺序索引号,例如df.iloc[[100]]
,但性能相同:
i = len(df.index)
for d in reversed(df.index):
i -= 1
df.iloc[[i]] = whatever_value
修改
我尝试的另一件事是
result_dict = OrderedDict()
for d in reversed(df.index):
result_dict[d] = whatever_value
df = pd.DataFrame.from_dict(result_dict, orient='index')
我只是使用dict通过datetime接收值,最后,我将其转换为新的数据帧。
这种方式比上述所有方式都要好,但pd.DataFrame.from_dict
类似于28 seconds
。
有没有办法更快地选择行?我不需要读取值,我只需要按顺序为每个行分配值。
或者有没有办法让dict -> dataframe
更快?