标准化嵌套的JSON数据

时间:2018-10-04 21:23:48

标签: python python-3.x pandas

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

0 个答案:

没有答案