Как конвертировать JSON в pd.dataframe в Python? - PullRequest
0 голосов
/ 05 октября 2019

У меня есть файл json, который мне нужно преобразовать в Pandas DataFrame.

json:

{'@odata.context': 'http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule', 'days': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], 'times': ['00:30'], 'enabled': False, 'localTimeZoneId': 'UTC', 'notifyOption': 'MailOnFailure'}

Я пробовал приведенные ниже коды один за другим, но все они возвращались: ValueError: arrays must all be same length

1)

test_df = pd.DataFrame(
                    {'@odata.context': 'http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule', 
                     'days': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], 
                     'times': ['00:30'], 
                     'enabled': False, 
                     'localTimeZoneId': 'UTC', 
                     'notifyOption': 'MailOnFailure'})

2) Также попытался поработать с "", как кто-то предложил в аналогичном вопросе stackoverflow

test_df = pd.DataFrame(
                    {"@odata.context": "http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule", 
                     "days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], 
                     "times": ["00:30"], 
                     "enabled": False, 
                     "localTimeZoneId": "UTC", 
                     "notifyOption": "MailOnFailure"})

3)

test_df = pd.DataFrame(
                    {"@odata.context": "http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule", 
                     "days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], 
                     "times": ["00:30"], 
                     "enabled": "False", 
                     "localTimeZoneId": "UTC", 
                     "notifyOption": "MailOnFailure"})

1 Ответ

0 голосов
/ 05 октября 2019

Все зависит от файла:

  • Первая проблема заключается в получении данных из файла, который зависит от формата файла
  • Пример используемых данных:пять повторяющихся строк данных в одинарных кавычках в верхней части вопроса.

Если файл представляет собой набор из dicts, каждый на новой строке:

{'@odata.context': 'http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule', 'days': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], 'times': ['00:30'], 'enabled': False, 'localTimeZoneId': 'UTC', 'notifyOption': 'MailOnFailure'}
{...}
{...}
{...}
{...}

Коддля создания кадра данных:

  • encoding="utf8" можно удалить, если это не требуется
  • pandas.io.json.json_normalize используется для нормализации полуструктурированных данных JSON в плоскую формуТаблица.
    • Это означает, что он сгладит вложенные списки.
import pandas as pd
from pandas.io.json import json_normalize
from ast import literal_eval


line_list = list()
with open("test.json", encoding="utf8") as f:
    for line in f:
        line = literal_eval(line)
        line_list.append(line)

df = json_normalize(line_list, ['days'], ['@odata.context', 'enabled', 'localTimeZoneId', 'notifyOption', 'times'],)

Если файл является list из dicts:

[{...},
 {...},
 {...},
 {...},
 {...}]

Код для создания фрейма данных:

with open("test.json", encoding="utf8") as f:
    data = literal_eval(f.read())

df = json_normalize(data, ['days'], ['@odata.context', 'enabled', 'localTimeZoneId', 'notifyOption', 'times'])

вывод фрейма данных:

         0                                                                                                      @odata.context enabled localTimeZoneId   notifyOption  times
    Sunday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
    Monday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
   Tuesday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
 Wednesday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
  Thursday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
    Friday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
  Saturday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
    Sunday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
    Monday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
   Tuesday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
 Wednesday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
  Thursday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
    Friday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
  Saturday  http://analysis.windows.net/v1.0/myorg/groups//$metadata#Microsoft.PowerBI.ServiceContracts.Api.V1.RefreshSchedule   False             UTC  MailOnFailure  00:30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...