pandas语法问题,数据类型转换问题

我想完成下图中的逐行之间根据坐标点计算距离

下面是编写的计算函数

 from math import sin, asin, cos, radians, fabs, sqrt
EARTH_RADIUS=6371           # 地球平均半径,6371km

def hav(theta):
    s = sin(theta / 2)
    return s * s

def get_distance_hav(row0, row1):
    "用haversine公式计算球面两点间的距离。"
    # 经纬度转换成弧度
    lat0 = row0['latitude']
    lng0 = row0['longitude']
    lat1 = row1['latitude']
    lng1 = row1['longitude']
    lat0 = radians(lat0)
    lat1 = radians(lat1)
    lng0 = radians(lng0)
    lng1 = radians(lng1)

    dlng = fabs(lng0 - lng1)
    dlat = fabs(lat0 - lat1)
    h = hav(dlat) + cos(lat0) * cos(lat1) * hav(dlng)
    distance = 2 * EARTH_RADIUS * asin(sqrt(h))

    return distance

运行

 df_test['distance_interval'] = get_distance_hav(df_test, df_test.shift(1))

报错cannot convert the series to 数据类型转换问题
请教大佬想完成这个计语法该怎么写

1个回答

data1 = df_test
data1.rename(columns={'latitude':'lat1', 'longitude':'long1'}, inplace = True)
data2 = df_test.shift(1)
data2.rename(columns={'latitude':'lat2', 'longitude':'long2'}, inplace = True)
data = data1.join(data2)
data = data.dropna()

def get_distance_hav(row):
"用haversine公式计算球面两点间的距离。"
# 经纬度转换成弧度
lat0 = row0['lat1']
lng0 = row0['long1']
lat1 = row1['lat2']
lng1 = row1['long2']
lat0 = radians(lat0)
lat1 = radians(lat1)
lng0 = radians(lng0)
lng1 = radians(lng1)

dlng = fabs(lng0 - lng1)
dlat = fabs(lat0 - lat1)
h = hav(dlat) + cos(lat0) * cos(lat1) * hav(dlng)
distance = 2 * EARTH_RADIUS * asin(sqrt(h))

return distance

df_test['distance_interval'] = data.apply(get_distance_hav, axis =1)

qq_31247017
孔橙 感谢大大大大佬
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问