qq_31247017
孔橙
采纳率25%
2018-11-26 06:37 阅读 1.2k

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 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)

    点赞 1 评论 复制链接分享

相关推荐