如何在for循环中根据API请求的结果生成熊猫数据框?

时间:2019-11-16 22:59:58

标签: python pandas dataframe dictionary for-loop

首先,我有一个熊猫数据框,其中有两列x和y

STO_preschool_df.head()
       x       y
0   6570864 1631350
1   6589738 1620526
2   6583935 1629809
3   6586569 1613337
4   6572835 1626518

现在,我想将每行的x和y值传递到API请求中。这是我写的函数:

def CoordConvert(from_x, from_y):
    coords_list = []
    for x, y in zip(from_x, from_y):
        url = 'https://www.lantmateriet.se/api/epi/Transform?from=3&to=SWEREF%2099%20lat%20long%20(ellh)&id=16446&x={}&y={}&z='.format(x, y)
        print(x, y)
        results = json.loads(requests.get(url).json())

        for v in sorted(results)[:2]:
            coord = [float(i) for i in results[v].split(': ')[1].split(' ')]
            conv_coord = round(coord[0] + coord[1]/60 + coord[2]/3600, 6)
            coords_list.append({v : conv_coord})
    pres_coords = pd.DataFrame(dict(ChainMap(*coords_list)), index=[0])

    return(pres_coords)

API查询的“结果”如下所示:

{'CalculatedX': 'Latitud: 59 14 18.35251',
 'CalculatedY': 'Longitud: 18 6 24.11734',
 'CalculatedZ': '',
 'IsOk': True,
 'Message': 'Beräknat med SWEN17_RH2000',
 'SubMessage': None,
 'ErrorMessage': None}

该功能应该将x / y坐标转换为GPS纬度和经度 当我叫它:

CoordConvert(from_x = STO_preschool_df['x'][:5],
            from_y = STO_preschool_df['y'][:5])

我可以看到它遍历了所有五行,但最后只对第一行产生结果。

6570864 1631350
6589738 1620526
6583935 1629809
6586569 1613337
6572835 1626518

    CalculatedY CalculatedX
0   18.106699   59.238431

很明显我在某个时候犯了错误。

所以问题是如何解决?

0 个答案:

没有答案