迭代构建Pandas DataFrame的最佳方法

3

假设我有一个正在循环的算法。它将返回未知数量的结果,我想将它们全部存储在DataFrame中。例如:

df_results = pd.DataFrame(columns=['x', 'x_squared'])

x = 0
x_squared = 1

while x_squared < 100:
    x_squared = x ** 2

    df_iteration = pd.DataFrame(data=[[x,x_squared]], columns=['x', 'x_squared'])
    df_results = df_results.append(df_iteration, ignore_index=True)

    x += 1

print(df_results)

输出:

     x  x_squared
0    0          0
1    1          1
2    2          4
3    3          9
4    4         16
5    5         25
6    6         36
7    7         49
8    8         64
9    9         81
10  10        100

问题在于我要进行大量迭代时。数学运算本身相当快。但是,在进行大循环时,数据框的创建和附加变得非常慢。

我知道这个例子可以很容易地解决,而不必在每次迭代中使用数据框。但是想象一下一个复杂的算法,它还使用数据框执行操作等。对我来说,有时按步骤构建结果数据框是更容易的方法。哪种方法是最好的呢?


你不能只是创建一个字典列表,然后在循环之后将其加载到数据框中吗?或者,你也可以将单独的数据框存储在列表中,然后使用 pandas.concat 一次,这应该可以节省一些对象创建时间。 - sim
1个回答

5

更高效的方法是创建一个字典列表,然后从中创建数据框。可以使用如下代码:

dictList = []

x = 0
x_squared = 1

while x_squared < 100:
    x_squared = x ** 2

    dict1 = {}
    dict1['x'] = x
    dict1['x_squared'] = x_squared
    dictList.append(dict1)
    x += 1

df = pd.DataFrame(dictList)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接