将 Pandas TimeSeries 导入 MongoDB
Posted
技术标签:
【中文标题】将 Pandas TimeSeries 导入 MongoDB【英文标题】:Pandas TimeSeries into MongoDB 【发布时间】:2014-04-28 02:48:17 【问题描述】:我有一个通用的 pandas TimeSeries,我想将它存储在 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 库创建此结构的方法?
【问题讨论】:
【参考方案1】:一种方法是使用reset_index
使其成为一个框架,以便使用record orient of 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]'
【讨论】:
执行 reset_index() 以从 TimeSeries 转换为 DataFrame 看起来像是一项极其昂贵的操作。有没有办法提高效率? @MonkeyButter 这可能是对 to_json 的一个很好的功能请求(对于 Series 有这个方向),这样会更有效率。【参考方案2】:在每个文档中使用一行将非常低效 - 在空间和查询性能方面。
如果您在架构上有灵活性,我们已经开源了一个库,用于在 MongoDB 中轻松存储熊猫(和其他数字数据):
https://github.com/manahl/arctic
【讨论】:
以上是关于将 Pandas TimeSeries 导入 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 fill_value 对 Pandas 中的 TimeSeries 重新采样?