从多个数据帧构建 numpy 数组(矩阵)



我有几个数据帧,它们的外观相同,但数据不同。

数据帧 1

                          bid
                        close
time                         
2016-05-24 00:00:00       NaN
2016-05-24 00:05:00  0.000611
2016-05-24 00:10:00 -0.000244
2016-05-24 00:15:00 -0.000122

数据帧 2

                          bid
                        close
time                         
2016-05-24 00:00:00       NaN
2016-05-24 00:05:00  0.000811
2016-05-24 00:10:00 -0.000744
2016-05-24 00:15:00 -0.000322
我需要构建一个数据帧列表

,然后将该数据帧列表传递给一个函数,该函数可以获取数据帧列表并将其转换为 numpy 数组。因此,在下面,矩阵中的每个条目都是数据帧的元素('bid 关闭')列。请注意,我不需要索引"时间"列

data = np.array([dataFrames])

返回此值(示例而不是实际数据)

[[-0.00114415  0.02502565  0.00507831 ...,  0.00653057  0.02183072
  -0.00194293] `DataFrame` 1 is here ignore that the data doesn't match above
 [-0.01527224  0.02899528 -0.00327654 ...,  0.0322364   0.01821731
  -0.00766773] `DataFrame` 2 is here ignore that the data doesn't match above
 ....]]

尝试

master_matrix = pd.concat(list_of_dfs, axis=1)
master_matrix = master_matrix.values.reshape(master_matrix.shape, order='F')

如果最终矩阵中的每一行对应于同一日期

master_matrix = pd.concat(list_of_dfs, axis=1).values

否则。

编辑以解决新添加的示例。在这种情况下,可以对从每个数据帧返回的列使用 np.vstack

import pandas as pd
import numpy as np
from io import StringIO
df1 = pd.read_csv(StringIO(
'''
time                bid_close
2016-05-24 00:00:00       NaN
2016-05-24 00:05:00  0.000611
2016-05-24 00:10:00 -0.000244
2016-05-24 00:15:00 -0.000122
'''), sep=r' +')
df2 = pd.read_csv(StringIO(
'''
time                bid_close
2016-05-24 00:00:00       NaN
2016-05-24 00:05:00  0.000811
2016-05-24 00:10:00 -0.000744
2016-05-24 00:15:00 -0.000322
'''), sep=r' +')
dfs = [df1, df2]
out = np.vstack(df.iloc[:,-1].values for df in dfs)

结果:

In [10]: q.out
Out[10]:
array([[      nan,  0.000611, -0.000244, -0.000122],
       [      nan,  0.000811, -0.000744, -0.000322]])

设置

import pandas as pd
import numpy as np
df1 = pd.DataFrame([1, 2, 3, 4],
                   index=pd.date_range('2016-04-01', periods=4),
                   columns=pd.MultiIndex.from_tuples([('bid', 'close')]))
df2 = pd.DataFrame([5, 6, 7, 8],
                   index=pd.date_range('2016-03-01', periods=4),
                   columns=pd.MultiIndex.from_tuples([('bid', 'close')]))
print df1
             bid
           close
2016-04-01     1
2016-04-02     2
2016-04-03     3
2016-04-04     4
print df2
             bid
           close
2016-03-01     5
2016-03-02     6
2016-03-03     7
2016-03-04     8

溶液

df = np.concatenate([d.T.values for d in [df1, df2]])
print df
[[1 2 3 4]
 [5 6 7 8]]

注意

指数不需要排队。 这仅从每个数据帧中获取原始np.array,并使用np.concatenate来完成其余的工作。

最新更新