Geopandas中GeoDataFrame执行dissolve()报LooseVersion错误咨询
问题成因
该错误与Geopandas本身无关,属于ArcGIS Pro自带conda环境中pandas、pyarrow、distutils三者的版本兼容冲突:
报错栈显示pandas在调用dissolve过程中触发扩展类型转换逻辑,尝试导入ArrowStringArray时,使用distutils.LooseVersion对比pyarrow版本号,因ArcGIS Pro修改过基础依赖包规则,或当前pyarrow版本的版本号格式不符合解析要求,导致LooseVersion实例未正常生成version属性,触发属性不存在报错。
可行解决方案
- 方案1:指定聚合列,避免触发非必要的类型转换逻辑
原代码不加限制的aggfunc='sum'会尝试对所有列执行求和,包括非数值类列,极易触发pandas的扩展类型校验逻辑。改为仅指定需要聚合的数值列即可规避问题:
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) # 仅指定需要聚合的数值字段,几何字段默认自动合并 dissolved_world = world.dissolve( by='continent', aggfunc={ 'pop_est': 'sum', 'gdp_md_est': 'sum' } )
- 方案2:临时关闭pandas的pyarrow字符串存储选项
在执行dissolve操作前添加配置项,避免pandas调用Arrow相关逻辑:
import pandas as pd pd.set_option('string_storage', 'python')
- 方案3:卸载pyarrow
如果当前环境不需要使用pyarrow相关功能,直接卸载即可彻底解决该冲突:
conda remove pyarrow
- 方案4:安装兼容版本的依赖包
ArcGIS Pro环境下建议安装经过验证的匹配版本,避免依赖冲突:
conda install pyarrow=10.0.1 pandas=1.4.4
内容的提问来源于stack exchange,提问作者Darren C.
相关产品推荐
相关产品推荐

