当尝试将 pandas 地理数据帧“gdf”写入羽毛文件格式时,我收到错误消息 UnsupportedGEOSVersionError: The “iso”选项至少需要 GEOS 3.10.0
gdf.to_feather("California_Buildings.feather")
我环境中当前的 GEOS 版本是 3.12.1 应该满足这个要求...尽管我没有直接在代码中导入 GEOS,因为 write_feather 是一个 geopandas 函数。我有什么遗漏的吗? *编辑添加 - geopandas.show_versions() 的输出:
SYSTEM INFO
-----------
python : 3.11.7 | packaged by Anaconda, Inc. | (main, Dec 15 2023, 18:05:47) [MSC v.1916 64 bit (AMD64)]
executable : C:\Users\AWertheim\anaconda3\python.exe
machine : Windows-10-10.0.22631-SP0
GEOS, GDAL, PROJ INFO
---------------------
GEOS : 3.8.0
GEOS lib : None
GDAL : 3.6.2
GDAL data dir: None
PROJ : 9.3.1
PROJ data dir: C:\Users\AWertheim\anaconda3\Library\share\proj
PYTHON DEPENDENCIES
-------------------
geopandas : 0.14.2
numpy : 1.26.4
pandas : 2.1.4
pyproj : 3.6.1
shapely : 2.0.1
fiona : 1.9.5
geoalchemy2: None
geopy : None
matplotlib : 3.8.0
mapclassify: 2.5.0
pygeos : None
pyogrio : None
psycopg2 : None
pyarrow : 14.0.2
rtree : 1.0.1
此处的完整错误消息:
UnsupportedGEOSVersionError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_52736\3260101815.py in <cell line: 0>()
1 #Feather
2 start = time.time()
----> 3 test_file.to_feather("California_Buildings.feather")
4 #og_file.to_feather("California_Buildings.feather")
5 #pyarrow.feather.write_feather(og_file, "California_Buildings.feather")
~\AppData\Local\ESRI\conda\envs\arcgispro-py3-clone\Lib\site-packages\geopandas\geodataframe.py in to_feather(self, path, index, compression, schema_version, **kwargs)
1161 from geopandas.io.arrow import _to_feather
1162
-> 1163 _to_feather(
1164 self,
1165 path,
~\AppData\Local\ESRI\conda\envs\arcgispro-py3-clone\Lib\site-packages\geopandas\io\arrow.py in _to_feather(df, path, index, compression, schema_version, **kwargs)
392
393 path = _expand_user(path)
--> 394 table = _geopandas_to_arrow(df, index=index, schema_version=schema_version)
395 feather.write_feather(table, path, compression=compression, **kwargs)
396
~\AppData\Local\ESRI\conda\envs\arcgispro-py3-clone\Lib\site-packages\geopandas\io\arrow.py in _geopandas_to_arrow(df, index, schema_version)
274 )
275 break
--> 276 df = df.to_wkb(**kwargs)
277
278 table = Table.from_pandas(df, preserve_index=index)
~\AppData\Local\ESRI\conda\envs\arcgispro-py3-clone\Lib\site-packages\geopandas\geodataframe.py in to_wkb(self, hex, **kwargs)
1012 # Encode all geometry columns to WKB
1013 for col in df.columns[df.dtypes == "geometry"]:
-> 1014 df[col] = to_wkb(df[col].values, hex=hex, **kwargs)
1015
1016 return df
~\AppData\Local\ESRI\conda\envs\arcgispro-py3-clone\Lib\site-packages\geopandas\array.py in to_wkb(geoms, hex, **kwargs)
192 if not isinstance(geoms, GeometryArray):
193 raise ValueError("'geoms' must be a GeometryArray")
--> 194 return vectorized.to_wkb(geoms._data, hex=hex, **kwargs)
195
196
~\AppData\Local\ESRI\conda\envs\arcgispro-py3-clone\Lib\site-packages\geopandas\_vectorized.py in to_wkb(data, hex, **kwargs)
193 def to_wkb(data, hex=False, **kwargs):
194 if compat.USE_SHAPELY_20:
--> 195 return shapely.to_wkb(data, hex=hex, **kwargs)
196 elif compat.USE_PYGEOS:
197 return pygeos.to_wkb(data, hex=hex, **kwargs)
~\AppData\Local\ESRI\conda\envs\arcgispro-py3-clone\Lib\site-packages\shapely\io.py in to_wkb(geometry, hex, output_dimension, byte_order, include_srid, flavor, **kwargs)
185 raise TypeError("flavor only accepts scalar values")
186 if lib.geos_version < (3, 10, 0) and flavor == "iso":
--> 187 raise UnsupportedGEOSVersionError(
188 'The "iso" option requires at least GEOS 3.10.0'
189 )
UnsupportedGEOSVersionError: The "iso" option requires at least GEOS 3.10.0
'''
I tried geopandas.write_feather(), as well as pyarrow.feather.write_feather(). Both resulted in error messages.
错误信息实际上表明了你使用的 GEOS 版本是 3.8.0,而不是 3.12.1。尽管你的系统中可能安装了 GEOS 3.12.1,但你的 Python 环境似乎链接到了旧版本。
要解决这个问题,你可以尝试以下方法:
-
升级 Geopandas: 首先尝试将 Geopandas 升级到最新版本。这可能会自动解决版本冲突。你可以使用以下命令进行升级:
pip install --upgrade geopandas
-
重新安装 Geopandas 及其依赖项: 如果升级不起作用,请尝试重新安装 Geopandas 及其依赖项。这将确保所有内容都使用一致的 GEOS 版本安装。你可以使用以下命令进行操作:
pip uninstall geopandas pip install geopandas
-
手动指定 GEOS 路径: 如果上述方法不起作用,你可能需要手动指定 GEOS 库的路径。首先,你需要找到 GEOS 3.12.1 安装的位置。然后,你可以使用以下环境变量设置路径:
import os os.environ['GEOS_LIBRARY_PATH'] = '/path/to/geos/library'
将/path/to/geos/library
替换为 GEOS 库的实际路径。 -
创建新的 Conda 环境: 作为最后的手段,你可以尝试创建一个新的 Conda 环境,并安装 Geopandas 及其依赖项。这将创建一个干净的环境,不太可能出现版本冲突。
完成这些步骤后,请再次运行
geopandas.show_versions()
以确认 GEOS 版本已更新到 3.10.0 或更高版本。之后,你应该能够毫无问题地将 GeoDataFrame 写入 Feather 文件。