Ошибка «LooseVersion» при запуске функции dissolve() в кадре геоданных в геопандах

#attributeerror #geopandas

Вопрос:

Я пытаюсь .dissolve() создать геодезическую рамку из полигонов, как в примере, приведенном в документации Geopandas, но я продолжаю получать сообщение об ошибке. Конкретно:

Я запускаю этот блок кода так, как он указан в документации:

 world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

world.dissolve(by='continent', aggfunc='sum')
 

Рамка world геоданных загружается без каких-либо проблем, но когда я пытаюсь запустить .dissolve() метод, я получаю эту ошибку:

 AttributeError                            Traceback (most recent call last)
<ipython-input-34-58541d0d91bb> in <module>
      1 world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
----> 2 world.dissolve(by='continent', aggfunc='sum')

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libsite-packagesgeopandasgeodataframe.py in dissolve(self, by, aggfunc, as_index)
    642 
    643         g = self.groupby(by=by, group_keys=False)[self.geometry.name].agg(
--> 644             merge_geometries
    645         )
    646 

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libsite-packagespandascoregroupbygeneric.py in aggregate(self, func, engine, engine_kwargs, *args, **kwargs)
    257 
    258             try:
--> 259                 return self._python_agg_general(func, *args, **kwargs)
    260             except (ValueError, KeyError):
    261                 # TODO: KeyError is raised in _python_agg_general,

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libsite-packagespandascoregroupbygroupby.py in _python_agg_general(self, func, *args, **kwargs)
   1171             try:
   1172                 # if this function is invalid for this dtype, we will ignore it.
-> 1173                 result, counts = self.grouper.agg_series(obj, f)
   1174             except TypeError:
   1175                 continue

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libsite-packagespandascoregroupbyops.py in agg_series(self, obj, func)
    697             # In the datetime64tz case it would incorrectly cast to tz-naive
    698             # TODO: can we get a performant workaround for EAs backed by ndarray?
--> 699             return self._aggregate_series_pure_python(obj, func)
    700 
    701         elif obj.index._has_complex_internals:

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libsite-packagespandascoregroupbyops.py in _aggregate_series_pure_python(self, obj, func)
    759 
    760         result = lib.maybe_convert_objects(result, try_float=0)
--> 761         result = maybe_cast_result(result, obj, numeric_only=True)
    762 
    763         return result, counts

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libsite-packagespandascoredtypescast.py in maybe_cast_result(result, obj, numeric_only, how)
    332         # things like counts back to categorical
    333         cls = dtype.construct_array_type()
--> 334         result = maybe_cast_to_extension_array(cls, result, dtype=dtype)
    335 
    336     elif numeric_only and is_numeric_dtype(dtype) or not numeric_only:

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libsite-packagespandascoredtypescast.py in maybe_cast_to_extension_array(cls, obj, dtype)
    391     """
    392     from pandas.core.arrays.string_ import StringArray
--> 393     from pandas.core.arrays.string_arrow import ArrowStringArray
    394 
    395     assert isinstance(cls, type), f"must pass a type: {cls}"

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libsite-packagespandascorearraysstring_arrow.py in <module>
     33     # file is imported from even if pyarrow is < 1.0.0, before pyarrow.compute
     34     # and its compute functions existed. GH38801
---> 35     if LooseVersion(pa.__version__) >= "1.0.0":
     36         import pyarrow.compute as pc
     37 

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libdistutilsversion.py in __ge__(self, other)
     68 
     69     def __ge__(self, other):
---> 70         c = self._cmp(other)
     71         if c is NotImplemented:
     72             return c

~AppDataLocalESRIcondaenvsarcgispro-py3-dcmay21libdistutilsversion.py in _cmp(self, other)
    333             other = LooseVersion(other)
    334 
--> 335         if self.version == other.version:
    336             return 0
    337         if self.version < other.version:

AttributeError: 'LooseVersion' object has no attribute 'version'
 

Есть какие-нибудь идеи о том, что происходит? Я пробовал делать это и с другими геоданными, но безуспешно.

Я также пытался, но безуспешно устранить проблему:

  • Ищу AttributeError: 'LooseVersion' object has no attribute 'version' . Результаты показывают, что это распространенная ошибка, но она возникает во многих контекстах и заставляет меня задуматься, не происходит ли что-то не так с внутренней работой Геопанд?
  • Обеспечение того, чтобы у меня была самая современная версия Geopandas, выполнив conda update geopandas