运行时错误:b'无初始化列表中的参数'

18

我试图自己解决我的问题,但是我无法做到。我试图以各种形式运行此代码,在ArcGIS Pro软件中也是如此,我无法在任何其他问题中找到此错误消息。从类似的问题来看,似乎有一些数据文件可能已丢失?

import geopandas as gpd
import json
import numpy as np
from shapely.geometry import LineString, Point, box
import ast
from pyproj import Proj
paths = road_features.SHAPE.map(lambda x: np.array(ast.literal_eval(x)["paths"][0]))
pathLineStrings = paths.map(LineString)
gdf = gpd.GeoDataFrame(road_features,geometry=pathLineStrings)
#gdf.crs = {'init': 'epsg:3857'}
gdf.crs = {'init': 'epsg:4326'}
gdf = gdf.to_crs({'init': 'epsg:4326'})

我收到了这个错误提示

RuntimeError: b'no arguments in initialization list'

我也在ArcGIS Pro中尝试了,结果一样。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\Lib\site-packages\geopandas\geodataframe.py", line 443, in to_crs
    geom = df.geometry.to_crs(crs=crs, epsg=epsg)
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\Lib\site-packages\geopandas\geoseries.py", line 304, in to_crs
    proj_in = pyproj.Proj(self.crs, preserve_units=True)
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\Lib\site-packages\pyproj\__init__.py", line 362, in __new__
    return _proj.Proj.__new__(self, projstring)
  File "_proj.pyx", line 129, in _proj.Proj.__cinit__
RuntimeError: b'no arguments in initialization list'

1
我在Anaconda、Windows 10安装中遇到了一个错误,其中pyproj包的文件datadir.py指向了proj文件“epsg”的错误位置(.../Anaconda3\share\proj而不是...\Anaconda3\Library\share)。编辑datadir.py为我解决了这个问题。 - Stephen McAteer
1
有趣的是,如果我从Anaconda Navigator或Anaconda Prompt启动JupyterLab或Jupyter Notebook,而不是从Anaconda Powershell提示符启动,就不会出现错误!这些不应该都是相同的吗?为什么Anaconda Powershell提示符会出问题? - Chad
我和你有完全一样的问题。从Miniconda提示符启动jupyter时没有问题,但是从Miniconda Powershell提示符启动时会出现问题。感谢你的提示,你有任何想法是怎么回事吗? - user1894205
8个回答

26

确保这是PyProj错误而不是GeoPandas的错误。

import pyproj
pyproj.Proj("+init=epsg:4326")

如果上述的运行时错误相同,我们可以确定这个错误是由pyproj引起的。

只需使用conda remove pyproj并使用pip重新安装即可。

pip install pyproj

至少对我来说这个方法是有效的。

今天(7月30日),我从miniconda重新安装后,conda remove pyproj 对我无效,相反我使用 pip uninstall pyprojpip install pyproj,一切正常。


2
谢谢!通过conda删除,然后使用pip安装pyproj。这对我有效。 - Xiaojian Chen
2
在卸载pyproj时,运行pip remove pyproj --force可能更容易,以避免卸载geopandas或其他依赖项。 - Gene Burinsky
3
遇到了同样的问题,我使用了 pip install --force-reinstall pyproj 来避免运行 conda remove pyproj,后者会删除依赖于 pyproj 的包,例如 geopandas - Allen

15

这个问题很可能是由于在Windows平台上Anaconda中pyproj的安装引起的。就像Stephen所说,解决方案是编辑“datadir.py”中的路径(位于...Anaconda3\Lib\site-packages\pyproj)。

正确的路径是“.../Anaconda3/Library/share”。确保完整路径已完成(可能包含用户名等)。我还需要将\更改为/。此更改对我有效。是的,在此更改之后,需要重新启动Spyder(或任何您使用的程序)。


7

是否定义了初始的crs?当我只传递epsg命令:gdf.to_crs('epsg:4326')时,我遇到了相同的问题。

正如你所展示的:

my_geoseries.crs = {'init' :'epsg:3857'}

应该是第一步,然后转换为:

gdf = gdf.to_crs({'init': 'epsg:4326'})

如果您正在使用ArcGIS,则还可以在属性中检查是否定义了初始的epsg?


7

我正在使用Pycharm。 我不得不同时使用Stone Shi和Dorregaray的方法。

import pyproj
pyproj.Proj("+init=epsg:4326")
> RuntimeError: b'no arguments in initialization list'

根据Stone Shi的说法,上述证明是一个pyproj错误。 因此,我使用了Pycharm->设置并重新安装了pyproj。 然后

import pyproj
pyproj.Proj("+init=epsg:4326")
> RuntimeError: b'no arguments in initialization list'

所以,这是一个pyproj错误,但重新安装pyproj并不能帮助我解决Pycharm->设置中的问题。

然后,我编辑了C:\Anaconda3\Lib\site-packages\pyproj\datadir.py文件,将其从:

pyproj_datadir="C:/Anaconda3\share\proj"

转给多雷加雷:

pyproj_datadir="C:\Anaconda3\Library\share"

然后再次进行测试:

import pyproj
pyproj.Proj("+init=epsg:4326")
>Process finished with exit code 0

没有运行时错误!

接着在我的上进行测试

wgs84  = data.to_crs({'init': 'epsg:4269'})
>Process finished with exit code 0

3
对我来说,升级 pyprojgeopandas 修复了这个问题。
pip install pyproj --upgrade 
pip install geopandas --upgrade 

1
使用Geopandas,尝试这个(应该可以工作):

gdf = gpd.GeoDataFrame(gdf, geometry=gdf['geometry'])
gdf.crs = {'init' :'epsg:2154'}
gdf = gdf.to_crs({'init' :'epsg:4326'}) 

你应该重新定义你的地理数据框,然后定义初始的地理参考系, 最后将其转换为正确的参考系。 如果有NaN,请不要忘记删除它们。


1

您可以直接使用pip强制重新安装pyproj:

pip install --upgrade --force-reinstall pyproj

这样就不需要卸载并重新安装,从而避免卸载所有相关依赖库的情况发生。


0

我遇到了同样的错误。我正在使用Python版本3.6.3和Geopandas版本0.4.0进行工作。通过使用以下代码而不是df = df.to_crs({'init': 'epsg:4326'})来解决了这个问题:

df = df.to_crs(epsg=4326)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接