我如何将具有相同值的键合并到单个对象中?

问题描述 投票:0回答:1

我使用Parsehub API以json格式抓取以下数据,当我想在某个国家/地区打印信息时,我只能获取第一组数据:'name','pop','area ','growth','worldPer'和'rank',但我无法获得“ image”。

[当我打印整个json文件时,数据就在这里,但是当我尝试使用图像值打印国家/地区数据时,出现键错误。

是否可以通过匹配国家/地区名称来合并两个对象?

main.py

class Data:
    def __init__(self, api_key, project_token):
        self.api_key = api_key
        self.project_token = project_token
        self.params = {"api_key":api_key}
        self.data = self.get_data()

    def get_data(self):
        r = requests.get(f'https://www.parsehub.com/api/v2/projects/xxxx/last_ready_run/data', params={"api_key": DATA_API_KEY})
        data = json.loads(r.text)
        print(r.text)
        return data

    def data_by_name(self,country):
        data = self.data['country']
        for content in data:
            if content['name'].lower() == country.lower():
                print(content)
                name = content['name']
                pop = content['pop']
                popRank = content['rank']
                growth = content['growth']
                per = content['worldPer']
                area = content['area']
                image = content['image'] #<----- KeyError: 'image'
        return(name,pop,popRank,growth,per,area)

data = Data(DATA_API_KEY,DATA_PROJECT_TOKEN)
data.data_by_name('china')

country.json

{
 "country": [
  {
   "name": "China",
   "pop": "1,438,862,614",
   "area": "9,706,961 km²",
   "growth": "0.39%",
   "worldPer": "18.47%",
   "rank": "1"
  },
  {
   "name": "China",
   "image": "https://s3.amazonaws.com/images.wpr.com/flag-pages/png250/cn.png"
  }
 ]
}
python python-3.x web-scraping html-parsing parsehub
1个回答
0
投票

熊猫可以为您解决这个问题

import pandas as pd

d = {
 "country": [
  {
   "name": "China",
   "pop": "1,438,862,614",
   "area": "9,706,961 km²",
   "growth": "0.39%",
   "worldPer": "18.47%",
   "rank": "1"
  },
  {
   "name": "China",
   "image": "https://s3.amazonaws.com/images.wpr.com/flag-pages/png250/cn.png"
  }
 ]
}

df = pd.DataFrame.from_dict(d['country']).groupby('name').first()

输出

                 pop           area growth worldPer rank                                              image
name
China  1,438,862,614  9,706,961 km²  0.39%   18.47%    1  https://s3.amazonaws.com/images.wpr.com/flag-p...
© www.soinside.com 2019 - 2024. All rights reserved.