herepy(PlacesAPI)中数据帧构造字典内字典中的For循环

2024-05-20 18:44:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python,我正在尝试访问函数PlacesAPI的结果,在这里我可以看到周围的超市,并使用for循环在主词典中创建一个数据框,其中每个词典的几个部分都位于主词典中,但是我得到的信息对于不同的行是相同的

你能帮我把字典的每个不同部分放在不同的一行吗

以下是我的代码和结果(现在可以复制):

    from herepy import PlacesApi
    import pandas as pd

def dataframe():

    a = {'items': [{'title': 'Marcos Francisco dos Santos Padaria e Mercearia',
   'id': 'here:pds:place:07675crc-dfd72cbf57bd45cc9277ed8530ffd61b',
   'ontologyId': 'here:cm:ontology:supermarket',
   'resultType': 'place',
   'address': {'label': 'Marcos Francisco dos Santos Padaria e Mercearia, Rua Oswero Carmo Vilaça, 33, Petrópolis - RJ, 25635-101, Brazil',
    'countryCode': 'BRA',
    'countryName': 'Brazil',
    'stateCode': 'RJ',
    'state': 'Rio de Janeiro',
    'city': 'Petrópolis',
    'district': 'Petrópolis',
    'street': 'Rua Oswero Carmo Vilaça',
    'postalCode': '25635-101',
    'houseNumber': '33'},
   'position': {'lat': -22.5315, 'lng': -43.16904},
   'access': [{'lat': -22.5314, 'lng': -43.16914}],
   'distance': 134,
   'categories': [{'id': '600-6300-0066', 'name': 'Grocery', 'primary': True},
    {'id': '600-6300-0244', 'name': 'Bakery & Baked Goods Store'}],
   'contacts': [{'phone': [{'value': '+552422312493'}]}]},
  {'title': 'Mr. Frango',
   'id': 'here:pds:place:076jx7ps-7c214f50052f0c23c9e5422ebde7d3cd',
   'ontologyId': 'here:cm:ontology:supermarket',
   'resultType': 'place',
   'address': {'label': 'Mr. Frango, Rua Teresa, Petrópolis - RJ, 25635-530, Brazil',
    'countryCode': 'BRA',
    'countryName': 'Brazil',
    'stateCode': 'RJ',
    'state': 'Rio de Janeiro',
    'city': 'Petrópolis',
    'district': 'Petrópolis',
    'street': 'Rua Teresa',
    'postalCode': '25635-530'},
   'position': {'lat': -22.52924, 'lng': -43.17222},
   'access': [{'lat': -22.52925, 'lng': -43.1722}],
   'distance': 545,
   'categories': [{'id': '600-6300-0066', 'name': 'Grocery', 'primary': True},
    {'id': '600-6000-0061', 'name': 'Convenience Store'}],
   'references': [{'supplier': {'id': 'core'}, 'id': '1159487213'}],
   'contacts': [{'phone': [{'value': '+552422201010'},
      {'value': '+552422315720', 'categories': [{'id': '600-6000-0061'}]}]}]},
  {'title': 'Mercadinho Flor de Petrópolis',
   'id': 'here:pds:place:07675crc-6b03dfbac65a45c0bfc52ab9a3f04556',
   'ontologyId': 'here:cm:ontology:supermarket',
   'resultType': 'place',
   'address': {'label': 'Mercadinho Flor de Petrópolis, Rua Teresa, 2060, Petrópolis - RJ, 25635-530, Brazil',
    'countryCode': 'BRA',
    'countryName': 'Brazil',
    'stateCode': 'RJ',
    'state': 'Rio de Janeiro',
    'city': 'Petrópolis',
    'district': 'Petrópolis',
    'street': 'Rua Teresa',
    'postalCode': '25635-530',
    'houseNumber': '2060'},
   'position': {'lat': -22.52895, 'lng': -43.17233},
   'access': [{'lat': -22.52895, 'lng': -43.17219}],
   'distance': 574,
   'categories': [{'id': '600-6300-0066',
     'name': 'Grocery',
     'primary': True}]}]}


    value = []
    address = []
    latlong = []
    
    
    teste  =  pd.DataFrame(columns = ['nome','endereco','rua','numero',
                'cidade','estado','cep','lat','long','raio'])
    
    teste['nome'] = []    
    teste['endereco'] = [] 
    teste['rua'] = []
    teste['numero'] =[]
    teste['cidade'] = [] 
    teste['estado'] = []
    teste['cep'] = []
    teste['lat'] = []
    teste['long'] = []
    teste['raio'] = [] 
        
    
    g = pd.DataFrame.from_dict(a.values())
       
    h =[]
    
    for i in range(3):
        v = g[i].values[0]
        h = v.items()
        for k, l in  h:
                value.append(l)
        for c, d in value[4].items():
                address.append(d)
        for la, lo in value[5].items():
                latlong.append(lo)  
        novo_concorrente = {'nome': value[0], 'endereco':address[0], 
                           'rua':address[7], 'numero':address[9], 
                           'cidade':address[5], 'estado':address[3], 
                           'cep':address[8],'lat':latlong[0],
                           'long':latlong[1],'raio':value[7]}
    
        teste = teste.append(novo_concorrente, ignore_index=True)
        
    return teste

Tags: idforherevalueaddressplacedelng
1条回答
网友
1楼 · 发布于 2024-05-20 18:44:27

您应该关注for循环。我建议您为要在最终数据帧中定义的每一行创建一个字典,然后创建一个列表将这些字典附加到其中

例如:

rows = []
for item in a["items"]:
    row = {
        "Latitude": item["position"]["lat"],
        "Postal code": item["address"]["postalCode"],
    }
    rows.append(row)

result = DataFrame(rows)
result

希望这能作为一个起点有所帮助

相关问题 更多 >