gpt4 book ai didi

python-3.x - 从 pandas 数据框到元组(对于半正矢模块)

转载 作者:行者123 更新时间:2023-12-04 19:14:02 25 4
gpt4 key购买 nike

我有一个 pandas 数据框 my_df ,其中包含以下列:

id  lat1 lon1 lat2 lon2
1 45 0 41 3
2 40 1 42 4
3 42 2 37 1

基本上,我想做以下事情:

import haversine

haversine.haversine((45, 0), (41, 3)) # just to show syntax of haversine()
> 507.20410687342115

# what I'd like to do
my_df["dist"] = haversine.haversine((my_df["lat1"], my_df["lon1"]),(my_df["lat2"], my_df["lon2"]))

TypeError: cannot convert the series to < class 'float' >

使用this ,我尝试了以下方法:

my_df['dist'] = haversine.haversine(
list(zip(*[my_df[['lat1','lon1']][c].values.tolist() for c in my_df[['lat1','lon1']]]))
,
list(zip(*[my_df[['lat2','lon2']][c].values.tolist() for c in my_df[['lat2','lon2']]]))
)

File "blabla\lib\site-packages\haversine__init__.py", line 20, in haversine lat1, lng1 = point1

ValueError: too many values to unpack (expected 2)

知道我做错了什么/如何实现我想要的吗?

最佳答案

applyaxis=1结合使用:

my_df["dist"] = my_df.apply(lambda row : haversine.haversine((row["lat1"], row["lon1"]),(row["lat2"], row["lon2"])), axis=1)

要在每一行上调用半正矢函数,该函数理解标量值,而不是类似数组的值,因此会出现错误。通过使用 axis=1 调用 apply,您可以逐行迭代,这样我们就可以访问每个列值并以方法期望的形式传递这些值。

我也不知道有什么区别,但有一个矢量化的 version半正矢公式的计算

关于python-3.x - 从 pandas 数据框到元组(对于半正矢模块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45054067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com