我有一个 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_data
和 lon_data
,然后循环遍历所有城市,并将城市名称作为键和经纬度数据存储在创建的两个字典中.
然后像这样将其映射回您的 pandas 数据框 df['lat'] = df['City'].map(lat_data)
关于python - 如何传递多个输入值并将结果附加回 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868926/