如何克服TypeError:无法将系列转换为<class'float'=“”>错误

时间:2019-05-10 13:52:54

标签: python python-3.x pandas jupyter-notebook

我正在尝试计算我尝试使用此代码的一系列航班的纬度和经度

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

1 个答案:

答案 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