Pandas 输入必须是数组、列表、元组或标量pyproj
我有一个DF,我试图将东/北向转换为长/纬度。我的df看起来像这样:Pandas 输入必须是数组、列表、元组或标量pyproj,pandas,numpy,geopandas,pyproj,Pandas,Numpy,Geopandas,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 39
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
我正在使用一个众所周知的代码块将东距和北距转换为long/lats,并将这些long/lats作为新列添加到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)
但是,我不断得到以下错误,输入必须是数组、列表、元组或标量。有人知道我的错误在哪里吗?您可以使用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)
您可以使用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)
这是最快的方法: 从pyproj导入转换器 trans=变压器从crs开始 EPSG:27700, EPSG:4326, 始终_xy=True, xx,yy=trans.transformmy_-df[Eastings]。值,my_-df[Northings]。值 my_df[X]=xx 我的_df[Y]=yy 也有助于参考:
这是最快的方法: 从pyproj导入转换器 trans=变压器从crs开始 EPSG:27700, EPSG:4326, 始终_xy=True, xx,yy=trans.transformmy_-df[Eastings]。值,my_-df[Northings]。值 my_df[X]=xx 我的_df[Y]=yy 也有助于参考: