Нормализация вложенных данных JSON - PullRequest
0 голосов
/ 05 октября 2018

Я предпринял несколько попыток нормализовать некоторые данные JSON, с которыми я работаю, но мне нужна помощь с этим.Вот некоторые примеры данных:

138 [{'id': 360014, 'default': False, 'name': 'Add/Remove User', 'raw_name': 'Add/Remove User', 'value': 'purpose_add/remove_user'}, {'id': 360014, 'default': False, 'name': 'Change Permissions', 'raw_name': 'Change Permissions', 'value': 'purpose_change_permissions'}, {'id': 360014, 'default': False, 'name': 'Failed Data Validation', 'raw_name': 'Failed Data Validation', 'value': 'purpose_failed_data_validation'}, {'id': 360014, 'default': False, 'name': 'Grant Access', 'raw_name': 'Grant Access', 'value': 'purpose_grant_access'}]
139 [{'id': 360014, 'default': False, 'name': '200 - OK', 'raw_name': '200 - OK', 'value': '200_-_ok'}, {'id': 360014, 'default': False, 'name': '201 - Created', 'raw_name': '201 - Created', 'value': '201_-_created'}, {'id': 360014, 'default': False, 'name': '400 - Bad Request', 'raw_name': '400 - Bad Request', 'value': '400_-_bad_request'}, {'id': 360014, 'default': False, 'name': '404 - Not Found', 'raw_name': '404 - Not Found', 'value': '404_-_not_found'}, {'id': 360014, 'default': False, 'name': '444 - No Response', 'raw_name': '444 - No Response', 'value': '444_-_no_response'}]
140 [{'id': 360014, 'default': False, 'name': 'Pi :: Flow', 'raw_name': 'Pi :: Flow', 'value': 'Pi____Flow'}, {'id': 360014, 'default': False, 'name': 'Pi :: CloudFlare', 'raw_name': 'Pi :: CloudFlare', 'value': 'Pi____cloudflare'}, {'id': 360014, 'default': False, 'name': 'Pi :: Other', 'raw_name': 'Pi :: Other', 'value': 'Pi____other'}, {'id': 360014, 'default': False, 'name': 'Platform :: Stackdriver', 'raw_name': 'Platform :: Stackdriver', 'value': 'platform____stackdriver'}, {'id': 360014, 'default': False, 'name': 'Platform :: AlertSite', 'raw_name': 'Platform :: AlertSite', 'value': 'platform____alertsite'}, {'id': 360014, 'default': False, 'name': 'Platform :: BigQuery', 'raw_name': 'Platform :: BigQuery', 'value': 'platform____bigquery'}, {'id': 360014, 'default': False, 'name': 'Platform :: Other', 'raw_name': 'Platform :: Other', 'value': 'platform____other'}]

В этом фрейме данных есть одно поле с именем «custom_field_options».Я думаю, что проблема в том, что есть несколько уровней вложенности.Я не знаю достаточно о JSON, чтобы действительно описать проблему лучше.

Я попробовал эти строки кода:

df2 = pd.DataFrame.from_dict(pd.io.json.json_normalize(a), orient='columns')
pd.io.json.json_normalize(filtered_df, record_path=None, meta=None, meta_prefix=None, record_prefix=None, errors='raise', sep='.')
json_normalize(a)

Но я получил следующую ошибку:

AttributeError: 'str' object has no attribute 'values'

Я попробовал это:

json_normalize(df[a])

Я получил этот результат:

ValueError: Must pass DataFrame with boolean values only

Я попробовал это:

flat = json_normalize(a['id'])

Я получил это обратно:

KeyError: 'id'

Как мне этого добиться?

########################################
### HERE IS ALL MY CODE

import pandas as pd
import numpy as np
from pandas.io.json import json_normalize


# create SQL
query = "SELECT * FROM Google BigQuery Table"
print(query)

# login
df = pd.read_gbq(query, project_id='my_id', dialect='standard')
print(df)

# drop all fields except 'custom_field_options'
s = df[['custom_field_options']]
print(s)


df = s[s.astype(bool)]
print(df)


a = pd.DataFrame(df)
print(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...