如何解决输入必须是数组、列表、元组或标量 pyproj
我有一个 DF,我试图将东/北转换为长/纬度。我的 df 看起来像这样:
import pandas as pd
import numpy as np
import pyproj
Postcode Eastings northings
0 AB101AB 394235 806529
1 AB101AF 394181 806429
2 AB101AG 394230 806469
3 AB101AH 394371 806359
4 AB101AL 394296 806581
我正在使用一个众所周知的代码块将东距和北距转换为长/纬度,并将这些长/纬度作为新列添加到 df:
def proj_transform(df):
bng = pyproj.Proj("+init=epsg:27700")
wgs84 = pyproj.Proj("+init=epsg:4326")
lats = pd.Series()
lons = pd.Series()
for idx,val in enumerate(df['Eastings']):
lon,lat = pyproj.transform(bng,wgs84,df['Eastings'][idx],df['northings'][idx])
lats.set_value(idx,lat)
lons.set_value(idx,lon)
df['lat'] = lats
df['lon'] = lons
return df
df_transform = proj_transform(my_df)
但是,我不断收到以下错误,“输入必须是数组、列表、元组或标量”。有没有人对我在这里出错的地方有任何见解?
解决方法
这是最快的方法:
https://gis.stackexchange.com/a/334307/144357
from pyproj import Transformer
trans = Transformer.from_crs(
"EPSG:27700","EPSG:4326",always_xy=True,)
xx,yy = trans.transform(my_df["Eastings"].values,my_df["Northings"].values)
my_df["X"] = xx
my_df["Y"] = yy
也有助于参考:
- https://pyproj4.github.io/pyproj/stable/gotchas.html#upgrading-to-pyproj-2-from-pyproj-1
- https://pyproj4.github.io/pyproj/stable/gotchas.html#init-auth-auth-code-should-be-replaced-with-auth-auth-code
- https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6
您可以将 DataFrame.apply
与 axis=1
一起使用并更改函数,例如:
def proj_transform(x):
e = x['Eastings']
n = x['Northings']
bng = pyproj.Proj("+init=EPSG:27700")
wgs84 = pyproj.Proj("+init=EPSG:4326")
lon,lat = pyproj.transform(bng,wgs84,e,n)
return pd.Series([lon,lat])
my_df[['lat','lon']] = my_df.apply(proj_transform,axis=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。