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

标签 python-3.x pandas tuples haversine

我有一个 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/

相关文章:

python - 从 Excel 中提取日期并使用 python 将其附加到列表中

python - 在 python 中将文件 x 中指定的函数作为命令行参数传递给文件 y 的最佳方法

python-3.x - 如何在 Bokeh 中为动画实现开始停止按钮/播放恢复按钮?

python - 如果 bool 结果为 true,则 Pandas 返回 CIDR

Python:从不考虑顺序的 "set of tuples"生成 "list of tuples"

c++ - 从强类型元组创建 PoD 元组

python - 在 mac (Big Sur) 上导入模块的问题,以及 sys.executable 和包的位置不匹配?

Python Pandas 科学记数法不一致

python - 将 DataFrame 转换为字典

java - Java中元组的计数排序