python - 如何传递多个输入值并将结果附加回 pandas 数据框

标签 python python-3.x pandas api dataframe

我有一个 API,我应该向其传递一个值并从 API 返回纬度和经度并将其附加回数据框。 API 一次只允许传递一个值并检索该值。 我有大约 100 多个城市名称可以获取纬度和经度。

我想一次将一个输入传递给 API 并存储到数据框中并附加其他输出。如何通过迭代多个输入来实现这一点

输入数据框

Input.head(4)
    ID  CITY
    23  Lyon
    45  Paris
    56  Mumbai
    76  Chennai

API数据检索代码

 import requests

    headers = {
        'accept': 'application/json',
        'Content-Type': 'application/json',
        'Authorization': 'Api-Key XXXXXXXXXXXXXXXXX',
    }

    params = (
        ('provider', 'google'),
    )

    data = '{ "address": "Singapore"}'

    response = requests.post('https://example.com/geocoder/geocode', headers=headers, params=params, data=data)

import json
d = json.loads(response.text)
df =pd.DataFrame([d['position']])

我的预期输出

ID  CITY     lat    lon
23  Lyon     1.352  103.819
45  Paris    1.456  117.345
56  Mumbai   1.345  118 .675
76  Chennai  1.678  117.678

来自 API 的示例响应

'{"position": {"lat": 1.352083, "lon": 103.819836}, "mapView": {"N": 1.4784001, "E": 104.0945001, "S": 1.1496, "W": 103.594}}\n'

最佳答案

import pandas as pd
import json
ids = [23,45,56,76]
cities = ['Lyon','Paris','Mumbai','Chennal',] 
lat_data = {}
lon_data = {}
df = pd.DataFrame( list(zip(ids, cities)), columns =['ID', 'City']) 

for city in cities:
  #this is where you run your api calls
  headers = {
   'accept': 'application/json',
   'Content-Type': 'application/json',
   'Authorization': 'Api-Key XXXXXXXXXXXXXXXXX',
  }
  params = ( ('provider', 'google'),)
  data = '{ "address":' + city +  '}'
  response = '{"position": {"lat": 1.352083, "lon": 103.819836}, "mapView": {"N": 1.4784001, "E": 104.0945001, "S": 1.1496, "W": 103.594}}\n'
  j = json.loads(response)
  lat_data[city] = j["position"]["lat"]
  lon_data[city] = j["position"]["lon"]

df['lat'] = df['City'].map(lat_data)  
df['lon'] = df['City'].map(lon_data)  

print(df)

这将输出:

   ID     City       lat         lon
0  23     Lyon  1.352083  103.819836
1  45    Paris  1.352083  103.819836
2  56   Mumbai  1.352083  103.819836
3  76  Chennal  1.352083  103.819836

基本上,创建两个字典 lat_datalon_data,然后循环遍历所有城市,并将城市名称作为键和经纬度数据存储在创建的两个字典中.

然后像这样将其映射回您的 pandas 数据框 df['lat'] = df['City'].map(lat_data)

关于python - 如何传递多个输入值并将结果附加回 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868926/

相关文章:

python - 在 python 上使用 cpd

python - 创建数据框子集的散点图

python - 随机播放 DataFrame 行

Python (3) readline 无论文件中有什么内容都返回空字符串

python - 使用 If/else 构造数据框

相当于 SQL 窗口函数和行范围的 Pandas

python - 如何创建具有多种原因的 python 异常?

Python/Pytest - 将模块导入到文件中,与目录中的位置无关?

python - 您可以在 Keras 中编写自定义学习率调度程序吗?

python-3.x - 如何让算法自动以 "smart"方式循环