Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';我不明白为什么在尝试将JSON值导入DF时出错_Python_Json_Pandas - Fatal编程技术网

Python Can';我不明白为什么在尝试将JSON值导入DF时出错

Python Can';我不明白为什么在尝试将JSON值导入DF时出错,python,json,pandas,Python,Json,Pandas,我一直在网上查看,但不明白为什么会出现错误,因为JSON中有可用的数据 我试图从JSON中提取“pull\u request\u contributors”值并将其放入DF中 我得到一个错误: KeyError: "Try running with errors='ignore' as key 'pull_request_contributors' is not always present" 代码 cg = CoinGeckoAPI() ts = '01-01-2017' cs = 'bi

我一直在网上查看,但不明白为什么会出现错误,因为JSON中有可用的数据

我试图从JSON中提取“pull\u request\u 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(数据,记录路径='developer\u data',元=['pull\u request\u contributors',错误='ignore')。设置索引(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')
通过这种方式,我们只需构造数据帧,而无需首先规范化响应

如果响应是字符串而不是dict,我不知道CoinGeckoAPI返回什么,可以先用

import json

data = json.loads(json_string)

希望这对我有所帮助

给我这个df:0拉式请求贡献者0分叉NaN 1星NaN 2订户NaN 3总问题NaN 4关闭问题NaN 5拉式请求合并NaN 6拉式请求贡献者NaN 7提交计数4周NaN为什么必须在每个对象中都可用?对不起,我刚才坐在计算机上。我编辑了我的原始答案。如果有帮助,请告诉我