Конвертировать массив json в кадре данных в отдельную строку - PullRequest
0 голосов
/ 14 ноября 2018

Я запрашиваю монго (3.2) с помощью pymongo и преобразую результаты json в массив данных.Документ mongodb json находится ниже:

   { 
    "_id" : "12345", 
    "applicationTimeStamp" : ISODate("2018-11-05T23:27:26.000+0000"), 
    "fields" : {
        "sessionId" : "12345678", 
        "timestamp" : "2018-11-05T23:27:026Z", 
        "List" : [
            {
                "client" : {
                    "sequenceNumber" : "1", 
                    "clientID" : "123", 
                    "contactDetails" : {
                        "firstName" : "XXXXX", 
                        "lastName" : "XXX", 
                        "primaryPhone" : "XXX", 
                        "emailAddress" : "XXX@XX.XXX", 
                        "contactNumber" : "XXXXX"
                    }
                }
            }, 
            {
                "client" : {
                    "sequenceNumber" : "2", 
                    "clientID" : "456", 
                    "contactDetails" : {
                        "firstName" : "XXXXX", 
                        "lastName" : "XXX", 
                        "primaryPhone" : "XXX", 
                        "emailAddress" : "XXX@XX.XXX", 
                        "contactNumber" : "XXXXX"
                    }
                }
            }
        ]
    }, 
    "_class" : "Application"
  }

При преобразовании моих результатов в кадр данных pandas я получаю столбец json "поля".Я пытаюсь извлечь различные идентификаторы клиента и создать новый столбец с разделителями-запятыми в кадре данных.Что-то вроде этого:

_id    |    applicationTimeStamp   | clientIDs    | fields
12345  |     2018-11-05            | 123,456      |  JSON

Я пытался использовать json_normalize и пытался получить его напрямую из Монго, но безрезультатно.Не могли бы вы посоветовать?

Спасибо

1 Ответ

0 голосов
/ 29 ноября 2018

вы можете сделать так

import pandas as pd

jsonStr = {
    "_id": "12345",
    "applicationTimeStamp": "2018-11-05T23:27:26.000+0000",
    "fields": {
        "sessionId": "12345678",
        "timestamp": "2018-11-05T23:27:026Z",
        "List": [
            {
                "client": {
                    "sequenceNumber": "1",
                    "clientID": "123",
                    "contactDetails": {
                        "firstName": "XXXXX",
                        "lastName": "XXX",
                        "primaryPhone": "XXX",
                        "emailAddress": "XXX@XX.XXX",
                        "contactNumber": "XXXXX"
                    }
                }
            },
            {
                "client": {
                    "sequenceNumber": "2",
                    "clientID": "456",
                    "contactDetails": {
                        "firstName": "XXXXX",
                        "lastName": "XXX",
                        "primaryPhone": "XXX",
                        "emailAddress": "XXX@XX.XXX",
                        "contactNumber": "XXXXX"
                    }
                }
            }
        ]
    },
    "_class": "Application"
}


def get_clientIDs(jsonStr):
    clientIDs = ""
    clientID_num = len(jsonStr.get('fields').get('List'))
    for i in range(clientID_num):
        clientIDs += jsonStr.get('fields').get('List')[i].get('client').get('clientID')
    return clientIDs

sd = pd.Series([jsonStr.get('_id'), jsonStr.get('applicationTimeStamp'), get_clientIDs(jsonStr), jsonStr.get('fields')], index=['_id', 'applicationTimeStamp', 'clientIDs', 'fields'])
print(pd.DataFrame(sd).T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...