如何有效地将数组传递给数据框?
How to efficiently pass an array to a data frame?
我是 运行 数据框 DF1 列上的 PCA,它 returns 是一个主成分数组。
我想创建一个数据框 DF2,它具有与 DF1 相同的索引,并且包含来自主成分数组的值。
来自
DF1=
v1 v2 v3
2014-01-02 0.58 0.89 -0.19
2014-01-03 -1.96 0.59 1.24
2014-01-04 2.06 -0.15 3.54
2014-01-05 0.31 1.25 -2.42
2014-01-06 1.31 0.33 0.89
... ... ... ...
PCs=
array([[ 0.14411173, -0.25557942, 0.08295314, ..., -0.24914411,
-0.35242784, 0.17412245],
[ 0.15391876, -0.3063616 , -0.62369197, ..., 0.18915513,
-0.39056901, 0.23227158],
[-0.00493105, -0.31936978, 0.35831582, ..., -0.2781707 ,
-0.29810411, 0.27513239],
[-0.5870741 , 0.16183593, 0.10528634, ..., -0.21776753,
-0.30365561, 0.17920256],
[-0.6353732 , -0.28649561, -0.21702067, ..., 0.36312823,
-0.11915208, -0.36003616]])
(在PCs数组中,每一行是一台PC)
得到
DF2=
PC1 PC2 PC3
2014-01-02 0.14411173 -0.15391876 ...
2014-01-03 0.25557942 -0.39056901
2014-01-04 ...
2014-01-05
2014-01-06
... ... ... ...
- 如何高效地将 PC 数组放入数据框中?
- 有没有比 运行 数据框上的 PCA 然后将数组合并到新数据框中更好、更有效的方法来获得我想要的东西? (例如直接在数据框中获取 PC 的方法)
您可以创建一个新的 pandas DataFrame,同时显式传递 df1
的索引并转置 pca
数组。
首先创建一些虚拟数据:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.random(size=(3, 5)), index=pd.date_range(start="2014-01-02", periods=3))
print(df1)
0 1 2 3 4
2014-01-02 0.875032 0.853087 0.686504 0.682114 0.199243
2014-01-03 0.522381 0.606048 0.398451 0.799883 0.030091
2014-01-04 0.489119 0.997239 0.021816 0.307509 0.099752
# create dummy pca results
pca = np.random.random(size=(2, 3))
print(pca)
[[ 0.42791681 0.56512179 0.44731657]
[ 0.10763007 0.35437208 0.79968957]]
现在,构建列名,并创建 pandas DataFrame,同时传递索引和列以及转置的 pca 数组:
columns = ["PC{}".format(x + 1) for x in range(pca.shape[0])]
df2 = pd.DataFrame(pca.T, index=df1.index, columns=columns)
print(df2)
PC1 PC2
2014-01-02 0.427917 0.107630
2014-01-03 0.565122 0.354372
2014-01-04 0.447317 0.799690
回答你的第二个问题:我不认为有更有效的方法来直接创建DataFrame。
我是 运行 数据框 DF1 列上的 PCA,它 returns 是一个主成分数组。 我想创建一个数据框 DF2,它具有与 DF1 相同的索引,并且包含来自主成分数组的值。
来自
DF1=
v1 v2 v3
2014-01-02 0.58 0.89 -0.19
2014-01-03 -1.96 0.59 1.24
2014-01-04 2.06 -0.15 3.54
2014-01-05 0.31 1.25 -2.42
2014-01-06 1.31 0.33 0.89
... ... ... ...
PCs=
array([[ 0.14411173, -0.25557942, 0.08295314, ..., -0.24914411,
-0.35242784, 0.17412245],
[ 0.15391876, -0.3063616 , -0.62369197, ..., 0.18915513,
-0.39056901, 0.23227158],
[-0.00493105, -0.31936978, 0.35831582, ..., -0.2781707 ,
-0.29810411, 0.27513239],
[-0.5870741 , 0.16183593, 0.10528634, ..., -0.21776753,
-0.30365561, 0.17920256],
[-0.6353732 , -0.28649561, -0.21702067, ..., 0.36312823,
-0.11915208, -0.36003616]])
(在PCs数组中,每一行是一台PC) 得到
DF2=
PC1 PC2 PC3
2014-01-02 0.14411173 -0.15391876 ...
2014-01-03 0.25557942 -0.39056901
2014-01-04 ...
2014-01-05
2014-01-06
... ... ... ...
- 如何高效地将 PC 数组放入数据框中?
- 有没有比 运行 数据框上的 PCA 然后将数组合并到新数据框中更好、更有效的方法来获得我想要的东西? (例如直接在数据框中获取 PC 的方法)
您可以创建一个新的 pandas DataFrame,同时显式传递 df1
的索引并转置 pca
数组。
首先创建一些虚拟数据:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.random(size=(3, 5)), index=pd.date_range(start="2014-01-02", periods=3))
print(df1)
0 1 2 3 4
2014-01-02 0.875032 0.853087 0.686504 0.682114 0.199243
2014-01-03 0.522381 0.606048 0.398451 0.799883 0.030091
2014-01-04 0.489119 0.997239 0.021816 0.307509 0.099752
# create dummy pca results
pca = np.random.random(size=(2, 3))
print(pca)
[[ 0.42791681 0.56512179 0.44731657]
[ 0.10763007 0.35437208 0.79968957]]
现在,构建列名,并创建 pandas DataFrame,同时传递索引和列以及转置的 pca 数组:
columns = ["PC{}".format(x + 1) for x in range(pca.shape[0])]
df2 = pd.DataFrame(pca.T, index=df1.index, columns=columns)
print(df2)
PC1 PC2
2014-01-02 0.427917 0.107630
2014-01-03 0.565122 0.354372
2014-01-04 0.447317 0.799690
回答你的第二个问题:我不认为有更有效的方法来直接创建DataFrame。