Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 输入必须是数组、列表、元组或标量pyproj_Pandas_Numpy_Geopandas_Pyproj - Fatal编程技术网

Pandas 输入必须是数组、列表、元组或标量pyproj

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

我有一个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
我正在使用一个众所周知的代码块将东距和北距转换为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 也有助于参考: