Как читать в pandas комплексных данных JSON файлы, содержащие много нижних уровней - PullRequest
0 голосов
/ 01 мая 2020

Я уже просмотрел Stack Overflow и многие сайты, но не смог найти решение, решающее мою проблему. Я пытаюсь преобразовать файл JSON, полученный от многомерного механизма логического вывода (AI), в формат Excel через фрейм данных pandas. Этот JSON файл имеет довольно сложную структуру с большим количеством уровней (я не знаком с JSON языком).

Вот формат JSON:

    {
"data": {
    "queries": [{
            "id": 292,
            "**name**": "Data_8",
            "queryId": 0,
            "values": {
                "Entreprise": {
                    "F1": {
                        "rule": 1450,
                        "**value**": "1.000000000000"
                    }
                }
            }
        }, {
            "id": 430,
            "name": "Data_9",
            "queryId": 1,
            "values": {
                "Entreprise": {
                    "F1": {
                        "rule": 1437,
                        "value": "N"
                    }
                }
            }
        }, {
            "id": 359,
            "**name**": "Data_10",
            "queryId": 2,
            "values": {
                "Entreprise": {
                    "F1": {
                        "rule": 876,
                        "**value**": "O"
                    }
                }
            }
        }, and so on.

I загрузить этот файл с:

    with open(output_JSON) as data_file:    
         data2= json.load(data_file)

Из файла мне нужно извлечь только два поля: имя и соответствующее значение в двух столбцах.

Требуемый вывод данных: - 1015 *

              name            value
   0          Data_8            1
   1          Data_9            N
   2          Data_10           O 

Спасибо за ваше время и вашу помощь.

В любом случае, берегите себя и будьте в безопасности @ home.

Привет из Парижа, Франция:)

ОБНОВЛЕНИЕ (2/05/2020): файл загружается с:

with open(output_JSON) as data_file:    
             data2= json.load(data_file)

затем:

df = pd.DataFrame(data2['data'])
print (df)

возвращает:

                                              queries
0   {'id': 292, 'name': 'Data_8', 'queryId': 0, 'v...
1   {'id': 430, 'name': 'Data_9', 'queryId': 1, 'v...
2   {'id': 359, 'name': 'Data_10', 'queryId': 2, '...

затем:

df2=df["queries"]
print (df2)

возвращает то же самое:

0     {'id': 292, 'name': 'Data_8', 'queryId': 0, 'v...
1     {'id': 430, 'name': 'Data_9', 'queryId': 1, 'v...
2     {'id': 359, 'name': 'Data_10', 'queryId': 2, '...

На данный момент я не знаю, как получить столбцы имени и значения в кадре данных .

Еще раз спасибо за ваше время:)

1 Ответ

0 голосов
/ 01 мая 2020

Используйте json_normalize

  • Если версия pandas <1, используйте <code>from pandas.io.json import json_normalize

data2

  • Это данные, которые у меня есть в файле с именем test.json
{
    "data": {
        "queries": [{
                "id": 292,
                "name": "Data_8",
                "queryId": 0,
                "values": {
                    "Entreprise": {
                        "F1": {
                            "rule": 1450,
                            "value": "1.000000000000"
                        }
                    }
                }
            }, {
                "id": 430,
                "name": "Data_9",
                "queryId": 1,
                "values": {
                    "Entreprise": {
                        "F1": {
                            "rule": 1437,
                            "value": "N"
                        }
                    }
                }
            }, {
                "id": 359,
                "name": "Data_10",
                "queryId": 2,
                "values": {
                    "Entreprise": {
                        "F1": {
                            "rule": 876,
                            "value": "O"
                        }
                    }
                }
            }
        ]
    }
}

import pandas as pd
from pandas.io.json import json_normalize  # not needed for current pandas
from pathlib import Path
import json

# load test.json
p = Path(r'c:\Users\...\test.json')

with p.open('r', encoding='utf-8') as f:
    data2 = json.loads(f.read())


# create the dataframe
# df = pd.json_normalize(data2, ['data', 'queries'])  # use for modern pandas
df = json_normalize(data2, ['data', 'queries'])

df.rename(columns={'values.Entreprise.F1.value': 'value'}, inplace=True)

df2 = df[['name', 'value']].copy()

print(df)

    id     name  queryId  values.Entreprise.F1.rule           value queries.name
0  292   Data_8        0                       1450  1.000000000000          NaN
1  430   Data_9        1                       1437               N          NaN
2  359  Data_10        2                        876               O          NaN

print(df2)

      name           value
0   Data_8  1.000000000000
1   Data_9               N
2  Data_10               O
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...