快速pandas.DataFrame初始化

时间:2014-02-10 20:29:16

标签: python pandas

问题

获取以下pandas DataFrame的有效方法是什么? (更新:每次更改数字)

   alpha  beta  gamma
0    1.5   2.5    3.5

[1 rows x 3 columns]

动机

我为我的一些方法添加了一个pandas.DataFrame API,可以批量进行计算。

在为新API复制一些测试用例时,我的测试平台的执行时间从200ms增加到超过8秒。在进行配置文件运行时,我注意到主要原因是创建了20k pandas.DataFrame个对象。

参见比较

In [1]: import pandas as pd

In [2]: timeit pd.DataFrame({'alpha': 1.5, 'beta': 2.5, 'gamma': 3.5}, [0])
1000 loops, best of 3: 405 us per loop

In [3]: timeit {'alpha': 1.5, 'beta': 2.5, 'gamma': 3.5}
1000000 loops, best of 3: 200 ns per loop

似乎创建一个DataFrame对象比低级结构慢2000倍。我试图优化它,但这和我一样快:

In [4]: import numpy as np

In [5]: timeit pd.DataFrame(np.array([[1.5, 2.5, 3.5]]), columns=['alpha', 'beta', 'gamma'])
1000 loops, best of 3: 144 us per loop

这仍然比dict慢720倍。有可能更快吗?例如,创建numpy数组只慢了10倍:

In [6]: timeit np.array([[1.5, 2.5, 3.5]])
100000 loops, best of 3: 1.99 us per loop

1 个答案:

答案 0 :(得分:1)

您可以拥有测试的全局数据框,只需执行df = global_df.copy(),例如:

In[1] global_df = pd.DataFrame({'alpha': 1.5, 'beta': 2.5, 'gamma': 3.5}, [0])
In[2] timeit global_df.copy()
10000 loops, best of 3: 20.2 us per loop