开始在线查看,但由于JSON中的数据可用,因此无法弄清为什么会出现错误。
我正在尝试从JSON中提取“ pull_request_contributors”值并放入DF中。
我得到了错误:
KeyError: "Try running with errors='ignore' as key 'pull_request_contributors' is not always present"
代码
cg = CoinGeckoAPI()
ts = '01-01-2017'
cs = 'bitcoin'
# get data
result = cg.get_coin_history_by_id(cs, ts)
#pull_request_contributors
df_pr = pd_json.json_normalize(data,
record_path='developer_data',
meta=['pull_request_contributors']).set_index(ts)
JSON
{'community_data': {'facebook_likes': 40055,
'reddit_accounts_active_48h': '4657.4',
'reddit_average_comments_48h': 186.5,
'reddit_average_posts_48h': 3.75,
'reddit_subscribers': 1014816,
'twitter_followers': 64099},
'developer_data': {'closed_issues': 3845,
'commit_count_4_weeks': 245,
'forks': 22024,
'pull_request_contributors': 564,
'pull_requests_merged': 6163,
'stars': 36987,
'subscribers': 3521,
'total_issues': 4478}...
期望
date bitcoin
01-01-2017 564
答案 0 :(得分:1)
由于字段pull_request_contributors在每个对象中均不可用,因此熊猫无法构建数据框。运行
df_pr = pd_json.json_normalize(data, record_path='developer_data', meta=['pull_request_contributors'], errors='ignore').set_index(ts)
忽略缺少的字段。
编辑
json_normalized创建一个表,其中所有字段均为列,它们的值构成行。因此,对于您要实现的目标,我不会使用json_normalize,因为您知道要读取的特定字段。这就是我要怎么做
ts = '01-01-2017'
cs = 'bitcoin'
df_pr = pd_json.json_normalize(data['developer_data'])
df = pd.DataFrame(data=[{'date': ts,
cs: data['developer_data']['pull_request_contributors']}]).set_index('date')
通过这种方式,我们无需首先标准化响应就可以构造DataFrame。
如果响应是字符串而不是dict,我不知道CoinGeckoAPI返回的内容,您可以先使用
对其进行解码import json
data = json.loads(json_string)
希望这会有所帮助