【发布时间】:2020-09-13 02:15:38
【问题描述】:
我正在使用 Pandas 和 PyProj 将东向和北向转换为经度和纬度,然后将拆分输出保存到像这样的 2 列中......
v84 = Proj(proj="latlong",towgs84="0,0,0",ellps="WGS84")
v36 = Proj(proj="latlong", k=0.9996012717, ellps="airy",
towgs84="446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894")
vgrid = Proj(init="world:bng")
def convertLL(row):
easting = row['easting']
northing = row['northing']
vlon36, vlat36 = vgrid(easting, northing, inverse=True)
converted = transform(v36, v84, vlon36, vlat36)
row['longitude'] = converted[0]
row['latitude'] = converted[1]
return row
values = pd.read_csv("values.csv")
values = values.apply(convertLL, axis=1)
这是可行的,但速度很慢,并且在较大的数据集上会超时。为了改进事情,我试图将其转换为使用lamba函数,希望能加快速度。到目前为止我有这个......
def convertLL(easting, northing):
vlon36, vlat36 = vgrid(easting, northing, inverse=True)
converted = transform(v36, v84, vlon36, vlat36)
row = row['longitude'] = converted[0]
return row
values ['longitude'] = values.apply(lambda row: convertLL(row['easting'], row['northing']), axis=1)
这个转换后的版本正在运行,比我的旧版本更快,并且在更大的数据集上不会超时,但这仅适用于经度,有没有办法让它也能做纬度?
另外,这是矢量化的吗?我可以再加快速度吗?
编辑
数据样本...
name | northing | easting | latitude | longitude
------------------------------------------------
tl1 | 378778 | 366746 | |
tl2 | 384732 | 364758 | |
【问题讨论】:
-
你能给我们
df.head()的输出,让我有东西玩吗? -
我已经用示例更新了帖子,够了吗?
-
对不起,我被叫走了,所以没有机会看它。我最初认为“好吧,我们可能可以取消所有对 PyProj 的函数调用并实现矢量化版本”,然后我发现 this 这真的让我不敢尝试这种方法:P
-
啊哈,我知道我们现在该怎么做。
transform已经接受了数组输入。请显示您的导入(对于vgrid)以及v36和v84在哪里定义,以便我可以进行可重复的测试? -
已更新操作