我对python和数据处理元素有些陌生,如果这是一个nooby问题,请谅解。
所以我有一个大型3D张量(?)数据集,看起来像这样:
it.toString()
数据集中的每个2D张量都连接到一个时间戳,即
data = [[[a], [b]], [[c], [d]] ... ]
每个数据集,即2018-09-29 05:00:00 -> [[a], [b]]
2018-09-29 06:00:00 -> [[c], [d]]
...
包含相同的列,即:
a, b, c, d
我需要创建一个多变量索引,也就是说,时间戳应该引用一个矩阵。
我尝试过:
a.head()
| val1 | val2 | val3 |
----------------------
| 1 | 3 | 2 |
| 3 | 5 | 6 |
| 4 | 1 | 3 |
...
使用日期创建最外面的索引,但是我无法达到该索引。当我用dfs = [[[a], [b]], [[c], [d]] ... ]
dates = ['2018-09-29 05:00:00', '2018-09-29 06:00:00']
x = pd.concat(dfs, keys=pd.to_datetime(dates))
列出键时,我只得到a,b ...的列,即x.keys()
。也就是说,它创建了这种表:
val1, val2, val3
那么,如何有效地创建此DateTime索引的多变量值?如何访问时间戳键?有更好的方法吗?
修改
即,如何实现此目标,如熊猫reshaping guide所示:
| val1 | val2 | val3 |
----------------------
2018-09-29 05:00:00 | 1 | 3 | 2 |
| 3 | 5 | 6 |
| 4 | 1 | 3 |
----------------------
2018-09-29 06:00:00 | 1 | 3 | 2 |
| 3 | 5 | 6 |
| 4 | 1 | 3 |
答案 0 :(得分:0)
不确定这是否是您想要做的,但是我尝试创建一个玩具示例, 根据您的问题指定。因此,我们有了时间戳记引用的二维矩阵:
import pandas as pd
import numpy as np
data = {
'2018-09-29 05:00:00': np.arange(9). reshape(3, 3),
'2018-10-29 05:00:00': np.arange(9, 18). reshape(3, 3),
'2018-11-29 05:00:00': np.arange(18, 27). reshape(3, 3)
}
然后我只是垂直堆叠数据并创建一个索引,如下所示:
matrices = []
index = []
for k, v in data.items():
matrices.append(v)
for _ in range(v.shape[0]):
index.append(k)
数据框如下所示:
df = pd.DataFrame(np.vstack(matrices), index=index)
print(df)
# 0 1 2
# 2018-09-29 05:00:00 0 1 2
# 2018-09-29 05:00:00 3 4 5
# 2018-09-29 05:00:00 6 7 8
# 2018-10-29 05:00:00 9 10 11
# 2018-10-29 05:00:00 12 13 14
# 2018-10-29 05:00:00 15 16 17
# 2018-11-29 05:00:00 18 19 20
# 2018-11-29 05:00:00 21 22 23
# 2018-11-29 05:00:00 24 25 26
如果要获取特定时间戳记的数据,只需使用loc
方法
print(df.loc['2018-09-29 05:00:00'])
# 0 1 2
# 2018-09-29 05:00:00 0 1 2
# 2018-09-29 05:00:00 3 4 5
# 2018-09-29 05:00:00 6 7 8
希望这会有所帮助。
编辑:
您也可以将字符串转换为时间戳pd.Timestamp(...)
,并继续使用字符串查询。不过,我对Pandas时间戳的注意事项一无所知。
编辑2:
您可以将对象保存在单元格中,并将整个numpy矩阵作为一个单元格条目包含在内,但随后您将松散查询矩阵的单行/列的负担。