Я предпринял несколько попыток нормализовать некоторые данные 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)