我遇到了一个奇怪的问题:在Jupyter笔记本电脑中使用GeoPandas时,.crs数据在我的第一个笔记本电脑上运行正常,然后在我的第二个笔记本电脑上丢失了。
仅查看库随附的一张世界地图,运行此单元格...
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.crs
...在我的第一个笔记本中返回...
{'init': 'epsg:4326'}
...,在我的第二个笔记本中,我得到...
{}
[基于(或由于)原因,匹配的crs在第一个笔记本中有效,但在第二个笔记本中无效。在笔记本1中...
mal0 = gpd.read_file('./bird-species/E00039600_mallard.gdb', layer=0)
mal0 = mal0.to_crs(world.crs)
mal0.crs
返回...
{'init': 'epsg:4326'}
...符合预期,但在笔记本2中会引发错误:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-10-fd67623093a6> in <module>
1 mal0 = gpd.read_file('./bird-species/E00039600_mallard.gdb', layer=0)
----> 2 mal0 = mal0.to_crs(world.crs)
3 mal0.crs
~/anaconda3/lib/python3.6/site-packages/geopandas/geodataframe.py in to_crs(self, crs, epsg, inplace)
441 else:
442 df = self.copy()
--> 443 geom = df.geometry.to_crs(crs=crs, epsg=epsg)
444 df.geometry = geom
445 df.crs = geom.crs
~/anaconda3/lib/python3.6/site-packages/geopandas/geoseries.py in to_crs(self, crs, epsg)
303 raise TypeError('Must set either crs or epsg for output.')
304 proj_in = pyproj.Proj(self.crs, preserve_units=True)
--> 305 proj_out = pyproj.Proj(crs, preserve_units=True)
306 project = partial(pyproj.transform, proj_in, proj_out)
307 result = self.apply(lambda geom: transform(project, geom))
~/anaconda3/lib/python3.6/site-packages/pyproj/__init__.py in __new__(self, projparams, preserve_units, **kwargs)
360 # on case-insensitive filesystems).
361 projstring = projstring.replace('EPSG','epsg')
--> 362 return _proj.Proj.__new__(self, projstring)
363
364 def __call__(self, *args, **kw):
_proj.pyx in _proj.Proj.__cinit__()
RuntimeError: b'no arguments in initialization list'
有人知道这是怎么回事吗?
我有完全相同的问题。对我来说,在jupyter Notebook中重新运行该单元格也会导致此错误。
仍不清楚为什么会发生这种情况,但是升级到Jupyter Lab可以解决此问题。我没有尝试升级到Jupyter Notebook的更高版本,但这可能也可行。