Создание pandas dataframe из вложенных данных из курсора mongo db - PullRequest
0 голосов
/ 15 мая 2018

Я вложил данные из ряда документов, которые я хотел бы поместить в один кадр данных 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 голосов
/ 15 мая 2018

Я все еще изучаю панды, и после обновления моего вопроса новыми попытками я наткнулся на Конкат . С

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...