Python 快速数据帧初始化 问题:

Python 快速数据帧初始化 问题:,python,pandas,Python,Pandas,获取以下数据帧的有效方法是什么?(更新:数字每次都会更改) 动机 我在我的一些方法中添加了pandas.DataFrame API,以便能够成批进行计算 在为新API复制一些测试用例时,测试台的执行时间从200毫秒提高到8秒以上。在运行概要文件时,我注意到主要原因是创建了20kpandas.DataFrame对象 看比较 In [1]: import pandas as pd In [2]: timeit pd.DataFrame({'alpha': 1.5, 'beta': 2.5, 'ga

获取以下数据帧的有效方法是什么?(更新:数字每次都会更改)

动机 我在我的一些方法中添加了pandas.DataFrame API,以便能够成批进行计算

在为新API复制一些测试用例时,测试台的执行时间从200毫秒提高到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

您可以为测试设置一个全局数据框,只需执行
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

整洁的我刚刚做了一个测试,不幸的是我不得不在每次迭代中更改数字。在我的机器上,它在[1]中产生
:timeit local_df=global_df.copy();local_df.loc[0]=1.3、2.3、3.3 1000个回路,最好为3:207 us/回路
。这甚至比numpy版本还要慢。你打算用这个框架做什么?您正在创建一个丰富的数据结构。如果你只是简单地创建一个1行多列的框架,那么你应该只做一个dict。我已经为一些数值函数编写了测试。在这些测试中,基于csv文件测试1000个不同的参数。许多pandas对象的问题更多的是在测试新API时出现的问题,而不是在正常使用时。在那里,这些数值函数只会被调用几次,并且使用大数据帧。我的目标是将测试保持在1s以下,否则我将无法持续执行它们。那么,如果“基准”不现实,那么它的意义何在?你应该测试你正在做的事情的一个现实的例子。我不是在测试基准,我想写快速单元测试。为了获得良好的覆盖率,测试主要覆盖拐角处的情况。这是一个不错的目标,但使用一行框架在IMHO中并不有用。在现实生活中,您不会创建20k个不同的帧,这会破坏使用熊猫的目的。如果它导致您的测试套件需要8秒,但提供了许多附加功能,那么问题是什么?是的,熊猫对象需要创建一些开销。它们不是dicts,也不是numpy数组;如果你想要这些,那么就使用它们。
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