我有一个边界框的csv文件,我在python中使用pandas加载。数据框为 df ,列名为 coord 。有谁知道如何创建一个循环来将列表传递给我的overpass api查询?
我试过了:
import time
import overpass
api = overpass.API(timeout=900)
coords = [df['coord'][0:10]]
for coord in coords:
results =[]
params =[]
params = 'node["power"="generator"]'+coord+';out skel;'
results = api.Get(params, responseformat="json")
time.sleep(5.0)
但是,我收到了多个请求错误。
我也尝试过:
x={}
x = (api.Get(param) for param in params)
但是返回了一个python对象(<generator object <genexpr> at 0x11755c0f8>
),我需要将数据作为json。
非常感谢任何帮助!
答案 0 :(得分:0)
这里有一些错误,主要是你的方法:
coords = [df['coord'][0:10]]
不是必需的。您可以使用更简单的df['coord'].tolist()
params
,然后立即使用字符串,为什么?params
字符串是造成你困难的原因。我会使用Python字符串的format
方法来判断查询中的coords。这样做更安全,因为它自己处理类型转换和正确放置。您不能简单地将一个坐标元组添加到字符串中并期望它能够工作。尝试在代码中打印要分配params
的字符串,并从下面的解决方案中打印相同的行,您将看到差异。您的代码会引发错误TypeError: Can't convert 'tuple' object to str implicitly
,而我的错误不会。这是一个完整的解决方案:
import time
import overpass
api = overpass.API(timeout=900)
for coord in df['coord'].tolist():
params = 'node["power"="generator"]{c};out skel;'.format(c=coord)
results = api.Get(params, responseformat="json")
time.sleep(5.0)
请注意,如果您的请求出错,请在您的问题中提供完整的回溯。这将有助于我们缩小错误的真正原因。