从mongo db游标的嵌套数据中建立pandas数据帧

时间:2018-05-15 13:46:34

标签: python mongodb pandas dataframe

我嵌套了一系列文档中的数据,这些文档我想放在一个Pandas数据框中(只有某些属性)。一旦我有了光标,我就尝试循环浏览文档并抓住我需要的东西。

    all_df_real= []

    for doc in cursor_real:
        single_real_df = pd.DataFrame(doc['data']['prices'])
        all_df_real.append(single_real_df) 
    return all_df_real

理想情况下,我想创建一个包含所有数据和价格的大型数据框,以便我可以将其合并到另一个数据框中,这些数据框的行将缺少来自all_df_real数据框的值。然而,我得到的结果是一个列表,因为我创建了一个空数组来附加single_real_df

有人可以帮我解决如何从多个文档创建数据框(我根据时间范围分组),并且只获取嵌套信息吗?

最初我使用find_one查询数据库,但由于我需要的文档的日期范围而遇到了问题。或者我是否通过根据光标中的文档一次创建一个数据帧并试图从中创建一个大数据帧来解决这个问题?

支持信息 这是我的一个文件看起来像

 {"_id" : ObjectId("1"), 
    "modelRun" : ISODate("2016-11-23T13:04:00.000+0000"), 
    "createdDateTime" : ISODate("2016-11-23T13:30:04.408+0000"), 
    "Type" : "r", 
    "data" : {
        "prices" : [
            {
                "timeStamp" : ISODate("2016-11-23T14:00:00.000+0000"), 
                "value" : 58.48
            }, 
            {
                "timeStamp" : ISODate("2016-11-23T15:00:00.000+0000"), 
                "value" : 55.01
            }, 
            {
                "timeStamp" : ISODate("2016-11-23T16:00:00.000+0000"), 
                "value" : 62.0
            }, 
            {
                "timeStamp" : ISODate("2016-11-23T17:00:00.000+0000"), 
                "value" : 52.92
            } #..etc..
          ]
       }
 }

这就是我抓住光标的方式

def grab_real_cursor(self, model_dt_till):
    query_real = {'Type': 'r', 'modelRun': {"$gte": model_dt_till, "$lte": model_dt_till + pd.Timedelta(days=1)}}

    cursor = self._collection.find(query_real)
    return cursor

更新 我尝试使用列名创建一个空数据框,但现在不是像以前那样获取所有数据的列表:

[             timeStamp  value
0  2016-11-23 13:00:00  54.98
1  2016-11-23 14:00:00  58.48
2  2016-11-23 15:00:00  55.01
3  2016-11-23 16:00:00  62.00
#.. etc,
,              timeStamp  value
0  2016-11-23 14:00:00  58.48
1  2016-11-23 15:00:00  55.01
2  2016-11-23 16:00:00  62.00
3  2016-11-23 17:00:00  52.92
]

    all_df_real= pd.DataFrame(columns=['timeStamp', 'value'])

我知道得到一个空的数据框

Empty DataFrame
Columns: [timeStamp, value]
Index: []

1 个答案:

答案 0 :(得分:0)

我还在学习熊猫,经过更多尝试更新我的问题后,我遇到了Concat。从那以后

all_df_real= []

for doc in cursor_real:
    single_real_df = pd.DataFrame(doc['data']['prices'])
    all_df_real.append(single_real_df) 
return all_df_real

返回:

[             timeStamp  value
0  2016-11-23 13:00:00  54.98
1  2016-11-23 14:00:00  58.48
2  2016-11-23 15:00:00  55.01
3  2016-11-23 16:00:00  62.00
#.. etc,
,              timeStamp  value
0  2016-11-23 14:00:00  58.48
1  2016-11-23 15:00:00  55.01
2  2016-11-23 16:00:00  62.00
3  2016-11-23 17:00:00  52.92
]

由数据框组成的列表,我可以返回result = pd.concat(all_df_real)