Pandas时间序列数据导入MongoDB

3

我有一个通用的 pandas 时间序列,希望将其存储在 MongoDB 中。时间序列对象 ts 如下所示:

>ts
2013-01-01 00:00:00     456.852985
2013-01-01 01:00:00     656.015532
2013-01-01 02:00:00     893.159043
...
2013-12-31 21:00:00    1116.526471
2013-12-31 22:00:00    1124.903600
2013-12-31 23:00:00    1065.315890
Freq: H, Length: 8760, dtype: float64

我希望将其转换为一个JSON文档数组,其中一个文档就是一行数据,以便存储在MongoDB中。类似于这样的形式:
[{"index": 2013-01-01 00:00:00, "col1": 456.852985},
{"index": 2013-01-01 01:00:00, "col1": 656.015532},
{"index": 2013-01-01 02:00:00, "col1": 893.159043},
...
]

我一直在研究TimeSeries.to_json()的“orient”选项,但是我无法找到获取此格式的方法。在pandas中是否有一种简单的方法执行此操作,或者我应该寻找使用外部JSON库创建此结构的方法?

2个回答

2
一种方法是使用 reset_index 将其转化为一个框架,以便使用 to_json 的记录方向:
In [11]: df = s.reset_index(name='col1')

In [12]: df
Out[12]: 
                 index        col1
0  2013-01-01 00:00:00  456.852985
1  2013-01-01 01:00:00  656.015532
2  2013-01-01 02:00:00  893.159043

In [13]: df.to_json(orient='records')
Out[13]: '[{"index":"2013-01-01 00:00:00","col1":456.852985},{"index":"2013-01-01 01:00:00","col1":656.015532},{"index":"2013-01-01 02:00:00","col1":893.159043}]'

1
执行reset_index()将TimeSeries转换为DataFrame似乎是一项非常昂贵的操作。有没有提高效率的方法? - prl900
@MonkeyButter 这可能是一个很好的功能请求,针对 to_json(为 Series 提供此方向),这将更加高效。 - Andy Hayden

0

每个文档使用一行将会非常低效 - 无论是在空间还是查询性能方面。

如果您对模式有灵活性,我们已经开源了一个库,可以轻松地将Pandas(和其他数值数据)存储在MongoDB中:

https://github.com/manahl/arctic


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接