相关疑难解决方法(0)

创建大型Pandas DataFrames:preallocation vs append vs concat

在构建庞大的数据帧块时,我对Pandas的性能感到困惑.在Numpy中,我们(几乎)总是通过预先分配一个大的空数组然后填充值来看到更好的性能.据我所知,这是因为Numpy立刻抓住了所需的所有内存,而不必为每次append操作重新分配内存.

在Pandas中,我似乎通过使用df = df.append(temp)模式获得了更好的性能.

这是一个时间示例.Timer该类的定义如下.正如您所见,我发现预分配比使用速度慢大约10倍append!使用np.empty适当的dtype值预分配数据帧有很大帮助,但该append方法仍然是最快的.

import numpy as np
from numpy.random import rand
import pandas as pd

from timer import Timer

# Some constants
num_dfs = 10  # Number of random dataframes to generate
n_rows = 2500
n_cols = 40
n_reps = 100  # Number of repetitions for timing

# Generate a list of num_dfs dataframes of random values
df_list = [pd.DataFrame(rand(n_rows*n_cols).reshape((n_rows, n_cols)), columns=np.arange(n_cols)) for i in np.arange(num_dfs)] …
Run Code Online (Sandbox Code Playgroud)

python pandas

28
推荐指数
3
解决办法
2万
查看次数

交织两个数据帧

假设我有两个数据帧d1d2

d1 = pd.DataFrame(np.ones((3, 3), dtype=int), list('abc'), [0, 1, 2])
d2 = pd.DataFrame(np.zeros((3, 2), dtype=int), list('abc'), [3, 4])
Run Code Online (Sandbox Code Playgroud)
d1

   0  1  2
a  1  1  1
b  1  1  1
c  1  1  1
Run Code Online (Sandbox Code Playgroud)
d2

   3  4
a  0  0
b  0  0
c  0  0
Run Code Online (Sandbox Code Playgroud)

交织两个数据帧列的简单和通用方法是什么.我们可以假设列数d2总是比列数少一个d1.并且,指数是相同的.

我要这个:

pd.concat([d1[0], d2[3], d1[1], d2[4], d1[2]], axis=1)

   0  3  1  4  2
a  1  0  1  0  1
b  1  0  1  0  1
c  1 …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

16
推荐指数
3
解决办法
1132
查看次数

如何压缩两个 pandas 数据框

我有两个 Pandas 数据框,如下所示(此处给出的示例代码)。

\n\n
                   A         B         C         D\n2000-01-01  0.298399 -0.738440 -0.505438  0.324951\n2000-01-02  1.300686 -0.938543 -1.850977  0.868467\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
                   A         B         C         D\n2000-01-03  0.328032  0.325845 -0.289175  0.393732\n2000-01-04  0.091853 -1.450642 -0.544152  1.073248\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望zip他们能够处理他们的价值观。为了澄清一下,我试图通过将相应的行压缩在一起来一次获取两行 \xe2\x80\x94 。我不想创建一个新的 df 除非这样会更有效。

\n\n
\n\n

我做了我想到的第一件事,即

\n\n
for i, (x, y) in enumerate(zip(df1, df2)):\n    print(i, x, y)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并期望得到类似的东西:

\n\n
0 (0.298399 -0.738440 -0.505438  0.324951) (0.328032  0.325845 -0.289175  0.393732)\n1 (1.300686 -0.938543 -1.850977  0.868467) (0.091853 -1.450642 -0.544152  1.073248)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我得到的是:

\n\n
0 A …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

pandas ×3

python ×3

dataframe ×1

numpy ×1

python-3.x ×1