首先,我有一个熊猫数据框,其中有两列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
很明显我在某个时候犯了错误。
所以问题是如何解决?