根据可用的经纬度查找距离,错误ValueError: 无法将字符串转换为float: 'start_station_latitude'。

问题描述 投票:0回答:1

我在Ipython笔记本上运行了以下代码。

我试图从4个列中存储的4种类型的地理位置计算公里数。它是 start_point_latitude, start_point_longitude, end_point_latitudeend_point_longitude. 在此之前,我已经做了一个数据集的副本,以存储所有的变化与新的数据在新的数据框架。在我需要计算的距离旁边,我有一个时间,在这段时间内,这个距离被覆盖。不幸的是,我得到一个错误信息。试着把数据类型从float改成字符串,然后再改回来。错误信息依然如故。

当我进行更改时,我得到的另一个错误是pairwise()。我可能是写错了代码。我应该在代码中的哪些地方进行修改才能使其正常工作?

python pandas matplotlib latitude-longitude
1个回答
1
投票

你错误地表达了 XY. 在你的代码中,它们是一个字符串列表,因此出现了错误。但你需要使用前一个单元格中的经纬度,所以你需要将你的 XY 是这样的。

X = [trips1.start_station_latitude, trips1.end_station_latitude]
Y = [trips1.start_station_longitude, trips1.end_station_longitude]

编辑

这是关于下面评论中提到的错误。你需要用以下方法计算弧度 math.radians 两者 XY 像这样。

from math import radians

X_radians = [radians(_) for _ in X]
Y_radians = [radians(_) for _ in Y]

result = dist.pairwise([X_radians, Y_radians])
# multiply by Earth radius to get kilometers
result = result * 6371000/1000

所以,这里有一个工作的例子 并尝试把它作为一个参考。你可以从下面的例子中下载使用的数据。此处

import pandas as pd
from math import radians
from sklearn.neighbors import DistanceMetric


df = pd.read_csv("countries.tsv", sep='\t')
egypt = df[df["name"] == "Egypt"]
australia = df[df["name"] == "Australia"]

X = [float(egypt.latitude), float(australia.latitude)]
Y = [float(egypt.longitude), float(australia.longitude)]
X_radians = [radians(_) for _ in X]
Y_radians = [radians(_) for _ in Y]

dist = DistanceMetric.get_metric('haversine')
result = dist.pairwise([X_radians, Y_radians])
# multiply by Earth radius to get kilometers
result = result * 6371000/1000
print(result)
#[[    0.        13232.2081954]
# [13232.2081954     0.       ]]

也就是说,埃及和澳大利亚之间的距离是 13232.208 KM


0
投票

我有建议怎么计算,结果成功了。 非常感谢大家的帮助! 下面是一段代码。

'from math import radians, cos, sin, asin, sqrtdef haversine(lat1, lon1, lat2, lon2): """ 计算地球上两点之间的大圆距离(以小数点为单位)""" # 将小数转换成弧度 lon1, lat1, lon2, lat2 = map(radians, [lat1, lon1, lat2, lon2]) # 哈弗正弦公式 dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat2)**2 + cos(lat1) * cos(lat2) * sin(dlon2)**2 c = 2 * asin(sqrt(a)) km = 6367 * c return km

for index, row in trips_1.iterrows(): trips_1.loc[index, 'distance'] = haversine(row['start_station_longitude'], row['start_station_latitude'], row['end_station_longitude'], row['end_station_latitude'])'

© www.soinside.com 2019 - 2024. All rights reserved.