我正在尝试计算我尝试使用此代码的一系列航班的纬度和经度
import pandas as pd
from math import radians, cos, sin, asin, sqrt
# convert decimal degrees to radians
lon1 = df1['from_lon'].map(radians)
lat1 = df1['from_lat'].map(radians)
lon2 = df1['dest_lon'].map(radians)
lat2 = df1['dest_lat'].map(radians)
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
results = 3959.0 * c
但我不断收到此错误
TypeError: cannot convert the series to <class 'float'>
我已经看到很多人问这个关于stackoverflow的错误,并尝试了提供给他们的答案。我尝试过的是通过这种方式使用
a = dlat.divide(2).apply(sin).pow(2) + cos(lat1) * lat2.apply(cos).multiply(dlon.divide(2).apply(sin).pow(2))
我也尝试使用lambda
,并尝试使用.astype(float)
将每个变量转换为float,但是不幸的是我没有任何作用。
lon1,lat1,lon2和lat2的数据类型为float64
。数据示例:
lon1
-1.826892
-1.287685
-1.534229
-1.534229
-1.826892
1.775173
-0.062252
答案 0 :(得分:0)
下面的代码可以正常工作。基本上,您需要使用Series.apply(lambda x:)函数。
a = (dlat/2).apply(lambda x : sin(x)) ** 2 + lat1.apply(lambda x : cos(x)) * lat2.apply(lambda x:cos(x))* (dlon/2).apply(lambda x : sin(x)) ** 2
c = 2 * a.apply(lambda x : asin(sqrt(x)))
results = 3959.0 * c