将测地线数据类型更改为整数

Posted

技术标签:

【中文标题】将测地线数据类型更改为整数【英文标题】:Changing the geodesic datatype to an integer 【发布时间】:2021-05-10 12:41:23 【问题描述】:

使用这段代码,我想创建一个距离矩阵,它有效!我使用了 geopy 包并使用测地线距离方法来计算存储在 Pandas 数据框中的坐标之间的距离。

def get_distance(col):
    end = RD1.loc[col.name, 'Eindlocatie_Coord']
    return RD1['Eindlocatie_Coord'].apply(geodesic, args=(end,), ellipsoid='WGS-84')

def get_totaldistance(matrix):
    square = pd.DataFrame(np.zeros(len(RD1)**2).reshape(len(RD1), len(RD1)), index=RD1.index, columns=RD1.index)
    distances = square.apply(get_distance, axis=1).T
    totaldist = np.diag(distances,k=1).sum()
    return totaldist

distances = get_totaldistance(RD1)

但是,这些距离属于测地线数据类型,我希望将这些距离设为浮点数,因为这样可以更轻松地进行进一步计算。

我知道print(geodesic(newport_ri, cleveland_oh).miles)(geopy documentation 中的一个示例)会返回浮点数,但我不确定如何将其应用于整个 pandas 数据框列。

那么,如何更改我的代码以返回浮点数?

【问题讨论】:

【参考方案1】:

您可以使用map() 将您的函数应用于数据框列:

df['distance'] = df['distance'].map(lambda x: geodesic(x,other_distance).miles)

根据你的版本修改它。

【讨论】:

【参考方案2】:

我在我的函数中创建了一个额外的子函数来更改输出,这正是我想要的。这是解决方案:

def get_distance(col):
    end = RD1.loc[col.name, 'Eindlocatie_Coord']
    return RD1['Eindlocatie_Coord'].apply(geodesic, args=(end,), ellipsoid='WGS-84')

def get_totaldistance(matrix):
    square = pd.DataFrame(np.zeros(len(RD1)**2).reshape(len(RD1), len(RD1)), index=RD1.index, columns=RD1.index)
    distances = square.apply(get_distance, axis=1).T
    
    def units(input_instance):
        return input_instance.km
    
    distances_km = distances.applymap(units)
    
    totaldist = np.diag(distances_km,k=1).sum()
    return totaldist

def units(input_instance) 函数可以解决我的问题。

【讨论】:

以上是关于将测地线数据类型更改为整数的主要内容,如果未能解决你的问题,请参考以下文章

将列类型从整数更改为字符串

将数据绑定 DataGridView 上的单元格类型更改为自定义 DataGridViewCell 类型

将带有数字的列的类型从 varchar 更改为 int

如何将时间跨度变量更改为整数类型?

将整数类型的所有主键更改为 bigint,包括引用

将 MongoDB 中的 _id 类型更改为整数是不是不好?