Конвертируйте JSON с вложенными объектами в Pandas Dataframe - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь загрузить json из URL-адреса и преобразовать его в фрейм данных Pandas, чтобы фрейм данных выглядел так, как показано ниже.

Я пробовал json_normalize, но он дублирует столбцы, один длякаждый тип данных (значение и stringValue).Есть ли более простой способ, чем этот метод, а затем отбрасывать и переименовывать столбцы после создания кадра данных?Я хочу сохранить строковое значение.

    Person ID   Position ID     Job ID  Manager
0   192         936             93      Tom



my_json = {

    "columns": [
        {
            "alias": "c3",
            "label": "Person ID",
            "dataType": "integer"
        },
        {
            "alias": "c36",
            "label": "Position ID",
            "dataType": "string"
        },
        {
            "alias": "c40",
            "label": "Job ID",
            "dataType": "integer",
            "entityType": "job"
        },
        {
            "alias": "c19",
            "label": "Manager",
            "dataType": "integer"
        },
     ],
    "data": [
        {
            "c3": {
                "value": 192,
                "stringValue": "192"
            },
            "c36": {
                "value": "936",
                "stringValue": "936"
            },
            "c40": {
                "value": 93,
                "stringValue": "93"
            },
            "c19": {
                "value": 12412453,
                "stringValue": "Tom"
            }
        }
    ]
}

1 Ответ

0 голосов
/ 21 мая 2018

Если c19 имеет тип string, это должно работать

alias_to_label = {x['alias']: x['label'] for x in my_json["columns"]}
is_str = {x['alias']: ('string' == x['dataType']) for x in my_json["columns"]}

data = []
for x in my_json["data"]:
    data.append({
        k: v["stringValue" if is_str[k] else 'value']
        for k, v in x.items()
    })
df = pd.DataFrame(data).rename(columns=alias_to_label)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...