[英]Buiding pandas dataframe from nested data from a mongo db cursor
我已將要放入一個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
行缺少來自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
UPDATE我嘗試只用列名創建一個空的數據框,但是現在而不是像以前那樣獲取所有數據的列表:
[ 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: []
我仍在學習Pandas,並在嘗試了更多問題后更新了問題,我遇到了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)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.