如何使用DateTIme索引此数据集?

时间:2019-04-02 09:45:55

标签: python pandas

我对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  |

1 个答案:

答案 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矩阵作为一个单元格条目包含在内,但随后您将松散查询矩阵的单行/列的负担。