这可能是一个简单的问题,但我在for循环中的经验非常有限。
我试图调整此页面中的解决方案https://www.mediawiki.org/wiki/API:Geosearch我举了一些简单的例子,但结果并不是我所期望的。
例如:
我有一个简单的数据框架:
df= pd.DataFrame({'City':['Sesimbra','Ciudad Juárez','31100 Treviso','Ramada Portugal','Olhão'],
'Country':['Portugal','México','Itália','Portugal','Portugal']})
我创建了一个基于城市的列表:
lista_cidades = list(df['City'])
我想迭代这个列表来获得坐标(最好是十进制(
到目前为止,我尝试了这种方法:
import requests
lng_dict = {}
lat_dict = {}
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
PARAMS = {
"action": "query",
"format": "json",
"titles": [lista_cidades],
"prop": "coordinates"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA['query']['pages']
for i in range(len(lista_cidades)):
for k, v in PAGES.items():
try:
lat_dict[lista_cidades[i]] = str(v['coordinates'][0]['lat'])
lng_dict[lista_cidades[i]] = str(v['coordinates'][0]['lon'])
except:
pass
但看起来代码不会在列表上迭代,并且总是返回相同的坐标
例如,当我用纬度坐标调用字典时,这就是我得到的
lng_dict
{'Sesimbra': '-7.84166667',
'Ciudad Juárez': '-7.84166667',
'31100 Treviso': '-7.84166667',
'Ramada Portugal': '-7.84166667',
'Olhão': '-7.84166667'}
我该怎么办才能解决这个问题?
提前感谢
我认为查询只返回一个结果,它只会从您的列表中获取最后一个城市(在您的cas中为"Olhão"坐标(。
您可以通过记录DATA
内容进行检查。
我不知道wikipedia API,但要么你的调用缺少参数(文档应该给你信息(,要么你必须为每个城市调用API,比如:
import pandas as pd
import requests
df = pd.DataFrame({'City': ['Sesimbra', 'Ciudad Juárez', '31100 Treviso', 'Ramada Portugal', 'Olhão'],
'Country': ['Portugal', 'México', 'Itália', 'Portugal', 'Portugal']})
lista_cidades = list(df['City'])
lng_dict = {}
lat_dict = {}
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
for city in lista_cidades:
PARAMS = {
"action": "query",
"format": "json",
"titles": city,
"prop": "coordinates"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA['query']['pages']
for k, v in PAGES.items():
try:
lat_dict[city] = str(v['coordinates'][0]['lat'])
lng_dict[city] = str(v['coordinates'][0]['lon'])
except:
pass