Leyendo un shapefile de polígonos con geopandas me sale un error extraño. Descubrí que es una advertencia normalmente oculta sobre otro error, que sólo vi porque convertí las advertencias en errores. También aparece al crear un GeoDataFrame:
import geopandas as gpd
from shapely.geometry import Polygon
import random
import warnings
warnings.filterwarnings('error')
geoms = [Polygon(
(random.random(), random.random())
for p in range(10)) for id in range(10)]
gdf = gpd.GeoDataFrame(geometry=geoms)
La salida:
Traceback (most recent call last):
File "C:\Daten2\Anaconda\lib\site-packages\shapely\geometry\polygon.py", line 300, in __array_interface__
raise NotImplementedError(
NotImplementedError: A polygon does not itself provide the array interface. Its rings do.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "error.py", line 11, in <module>
gdf = gpd.GeoDataFrame(geometry=geoms)
File "C:\Daten2\Anaconda\lib\site-packages\geopandas\geodataframe.py", line 167, in __init__
self.set_geometry(geometry, inplace=True)
File "C:\Daten2\Anaconda\lib\site-packages\geopandas\geodataframe.py", line 295, in set_geometry
level = _ensure_geometry(level, crs=crs)
File "C:\Daten2\Anaconda\lib\site-packages\geopandas\geodataframe.py", line 43, in _ensure_geometry
out = from_shapely(data, crs=crs)
File "C:\Daten2\Anaconda\lib\site-packages\geopandas\array.py", line 168, in from_shapely
return GeometryArray(vectorized.from_shapely(data), crs=crs)
File "C:\Daten2\Anaconda\lib\site-packages\geopandas\_vectorized.py", line 142, in from_shapely
aout[:] = out
DeprecationWarning: An exception was ignored while fetching the attribute `__array_interface__` from an object of type 'Polygon'. With the exception of `AttributeError` NumPy will always raise this exception in the future. Raise this deprecation warning to see the original exception. (Warning added NumPy 1.21)
El aviso se produce en la línea
aout[:] = out
de un módulo geopandas. out es una lista de shapely.geometry.polygon.Polygon, mientras que aout es un array numpy de la misma longitud con dtype object, que contiene Nones.
Así que tengo curiosidad por saber qué está pasando aquí.