Fill DataFrame in for loop with Python involving a function
我想从Mapzen中检索德国地址的地理数据(long/lat)。Mapzen提供了一个请求密钥的API。每个请求都返回一个JSON。
以下代码返回一个地址的long/lat和地址名:
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd import request BASE_URL = 'https://search.mapzen.com/v1/search' txt = 'Stübekamp 33, Hamburg, Germany' resp = requests.get(BASE_URL, params = {'api_key':"YourKey", 'size': 1, 'text': txt}) data = resp.json() Full = pd.DataFrame(columns=["Long","Lat","Street"]) LongLat = data["bbox"][0:2] Street = data["features"][0]["properties"]["label"] Full.loc[1] = pd.Series({"Long": LongLat[1],"Lat": LongLat[0],"Street": Street}) |
我试图替换txt参数来循环它,但只要我理解request.get方法就不能循环。因此,我遵循这种方法并定义了一个在for循环中使用的函数。
我想让for循环在函数的txt参数中粘贴地址中一行的字符串。这应该做N次,而N是地址向量的长度。检索到的信息(long/lat/address)应添加到AllAddresses数据帧中的新行。所以最后我有一个数据框架,有三列("long"、"lat"、"street"),在本例中是三行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def Getall(Input): resp = requests.get('https://search.mapzen.com/v1/search', params = {'api_key':"YourKey", 'size': 1, 'text': Input}) data = resp.json() LongLat = data["bbox"][0:2] Street = data["features"][0]["properties"]["label"] Full = pd.DataFrame(columns=["Long","Lat","Street"]) Full.loc[1] = pd.Series({"Long": LongLat[1],"Lat": LongLat[0],"Street": Street}) return Full addresses = pd.DataFrame(["Stübekamp 33, Hamburg, Germany","Mesterfeld 28, Hamburg, Germany","Beutnerring 2, Hamburg, Germany"]) AllAddresses = [] for index, row in addresses.iterrows(): Input = row("0") data = Getall(Input) AllAddresses.append = data |
但是,此代码返回错误:
1 | TypeError: 'Series' object is not callable |
我读到这是一条路,但我从R来,在这里有点迷茫。
地址是熊猫数据帧,没有明显的原因。然后你重复它,如果你需要一个熊猫数据帧,这通常是一个坏主意,如果你不需要的话。然后你取"row",这是一个系列,像函数行一样调用它("0")。因为它不是一个函数,所以你会得到一个错误。只需列一个地址列表就可以解决你的第一个问题。
当然,您会发现full有一个问题,它也不需要是一个数据帧;您不能添加这样的行;您正在为每一行返回一个数据帧,这也可能不是您想要的。