我做了很多尝试来标准化我正在使用的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)