【问题标题】:Not able to get all the columns using json normalise无法使用 json normalize 获取所有列
【发布时间】:2021-12-04 02:50:34
【问题描述】:

我一直在尝试从下面嵌套的字典中获取所有记录,但无法获取 pkey、c​​ode 等字段。

{'instrument': {'instrumentId': 15873, 'instrumentSymbol': 'EXCH-XCBT-CBA', 'instrumentType': 'holiday', 'created': '2020-01-10T06:39:27Z'}, 'mappings': [{'pkey': 40295, 'provider': 'pv', 'system': 'holidays', 'mapping': {'code': 'CBA'}, 'created': '2020-01-10T06:39:28', 'updated': '2020-01-10T06:39:28', 'startDate': '2020-01-10', 'endDate': None}]}

import requests
import json, pandas as pd
from pandas.io.json import json_normalize
import csv
import urllib

URL = "https://dsv.ihsmvals.com/instruments/v2.0/mappings/instruments/all/provider/pv/system/holidays"
response = urllib.request.urlopen(URL)

print(response)
text = response.read()
json_data = json.loads(text)
df_rest = pd.DataFrame(json_data)
df=pd.json_normalize(json_data,'mappings')
complete_df = pd.concat([df_rest,df],axis=1)
complete_df.to_csv("output.csv")

这是目前输出的样子,缺少一些相关字段,如 pkey、c​​ode

【问题讨论】:

  • 有人可以帮忙吗?

标签: python json pandas


【解决方案1】:

这里是整个数据的解决方案:

import pandas as pd
import json

f = open("api_data.json", "r")
data = json.load(f)
arr1 = []
arr2 = []
for item in data['mappings']:
    tmp1 = {'instrument': [item['instrument']]}
    tmp2 = {'mappings': [item['mappings'][0]]}
    arr1.append(tmp1)
    arr2.append(tmp2)


df_rest = pd.json_normalize(arr1,'instrument')
df_rest2 = pd.json_normalize(arr2,'mappings')
df=pd.json_normalize(data,'mappings')
complete_df = pd.concat([df_rest, df_rest2], axis=1)
print(complete_df)

【讨论】:

  • df_rest = pd.DataFrame([json_data['instrument']]) KeyError: 'instrument'
  • 我的代码是基于你附加的json,检查json_data是否是字典,是否包含key
  • 附加的json是样本数据
  • json_data 基本上就是 URL 中的任何内容
  • 我试过打印(json_data),它确实是一个python字典
猜你喜欢
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多