使用涉及函数的Python在for循环中填充DataFrame

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有一个问题,它也不需要是一个数据帧;您不能添加这样的行;您正在为每一行返回一个数据帧,这也可能不是您想要的。