如何从DataFrame经纬度列生成坐标数组供scipy.spatial.Delaunay使用?
问题根因
你写的嵌套循环会生成纬度、经度两列的全排列笛卡尔积,最终得到的坐标数量是原DataFrame行数的平方,数据量稍大就会直接占满内存导致内核崩溃。
而scipy.spatial.Delaunay要求的入参是N行2列的数组,每一行对应原数据中一个点位的(纬度, 经度)组合,不需要全排列所有经纬度值。
正确构造coord数组的方案
- 方案1(最推荐,效率最高):直接用Pandas内置方法转换
# 直接提取两列转为numpy数组,格式完全符合Delaunay入参要求 coord = df[['lat', 'long']].to_numpy()
- 方案2(适配旧版本Pandas):使用values属性
coord = df[['lat', 'long']].values
- 方案3(手动遍历实现,仅适合需要自定义处理每一行坐标的场景)
import numpy as np coord = [] # 单层循环遍历每一行,取当前行的经纬度组成坐标 for _, row in df.iterrows(): coord.append((row['lat'], row['long'])) # 转为numpy数组 coord = np.array(coord)
校验格式
构造完成后可执行如下代码确认格式正确:
print(coord.shape)
输出应为(原数据行数, 2),即可正常传入Delaunay使用。
内容的提问来源于stack exchange,提问作者Rbcc
相关产品推荐
相关产品推荐

