python - 无法弄清楚为什么在尝试将 JSON 值输入 DF 时出现错误
问题描述
一直在网上查找,但由于数据在 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
解决方案
由于字段 pull_request_contributors 在每个对象中都不可用,因此 pandas 无法构建数据框。运行
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,而无需首先对响应进行标准化。
如果响应是字符串而不是字典,我不知道 CoinGeckoAPI 返回什么,你可以先解码它
import json
data = json.loads(json_string)
希望这可以帮助
推荐阅读
- javascript - 如何将循环div的ID转换为javascript
- javascript - Web Audio Api:audioContext.createConstantSource() 未在 Safari 中实现;解决方法?
- python-3.x - 将 pandas 列值与列标题值相乘(如果标题值是数字/数字)
- python - 如何根据一组兄弟姐妹中的位置仅匹配给定类型的第一个元素
- php - 现在如何在 Lumen 中启用助手
- java - 使用for循环和对象方法为Java中的对象数组分配值时遇到问题
- r - selenium 通过两个标签选择 css
- reactjs - 我们如何将 html 解析为反应原生视图
- image - 仅当区域大于 10 像素时才对图像中的区域进行阈值
- ios - 在 Visual Studio 2019 中的 Xamarin 上运行故事板时出错