孔橙 2018-11-26 06:37 采纳率: 0%
浏览 1218
已采纳

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条回答

  • dotaqyp 2018-11-26 13:27
    关注

    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)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器