我正试着用我自己的数据复制this个教程.我有一个简单的正方形多边形栅格:

from shapely import wkt
import pandas as pd
import geopandas as gpd

data_list = [
    [0,51, wkt.loads("POLYGON ((-74816.7238 5017078.8988, -74716.7238 5017078.8988, -74716.7238 5016978.8988, -74816.7238 5016978.8988, -74816.7238 5017078.8988))")],
    [1,91, wkt.loads("POLYGON ((-74816.7238 5016978.8988, -74716.7238 5016978.8988, -74716.7238 5016878.8988, -74816.7238 5016878.8988, -74816.7238 5016978.8988))")],
    [2,88, wkt.loads("POLYGON ((-74816.7238 5016878.8988, -74716.7238 5016878.8988, -74716.7238 5016778.8988, -74816.7238 5016778.8988, -74816.7238 5016878.8988))")],
    [3,54, wkt.loads("POLYGON ((-74816.7238 5016778.8988, -74716.7238 5016778.8988, -74716.7238 5016678.8988, -74816.7238 5016678.8988, -74816.7238 5016778.8988))")],
    [4,51, wkt.loads("POLYGON ((-74816.7238 5016678.8988, -74716.7238 5016678.8988, -74716.7238 5016578.8988, -74816.7238 5016578.8988, -74816.7238 5016678.8988))")],
]

df = pd.DataFrame(data_list, columns=["id", "data", "geometry"])
gdf = gpd.GeoDataFrame(df, geometry="geometry", crs=32633)

我已将GeoPandas GeoDataFrame转换为SpatialPandas GeodatafFrame:

from spatialpandas import GeoDataFrame

sp_gdf = GeoDataFrame(gdf)

在这一点上,我试着根据this个例子创建一个Cholopeth map :

import datashader as ds

canvas = ds.Canvas(plot_width=1000, plot_height=1000)
agg = canvas.polygons(sp_gdf, 'geometry', agg=ds.mean('data'))

但我在下面的错误中面临:

AttributeError                            Traceback (most recent call last)
Cell In[7], line 4
      1 import datashader as ds
      3 canvas = ds.Canvas(plot_width=1000, plot_height=1000)
----> 4 agg = canvas.polygons(sp_gdf, 'geometry', agg=ds.mean('data'))
      6 agg

File ~/.cache/pypoetry/virtualenvs/drakonotebook-larABRfp-py3.10/lib/python3.10/site-packages/datashader/core.py:753, in Canvas.polygons(self, source, geometry, agg)
    751     agg = any_rdn()
    752 glyph = PolygonGeom(geometry)
--> 753 return bypixel(source, self, glyph, agg)

File ~/.cache/pypoetry/virtualenvs/drakonotebook-larABRfp-py3.10/lib/python3.10/site-packages/datashader/core.py:1258, in bypixel(source, canvas, glyph, agg, antialias)
   1255 canvas.validate()
   1257 # All-NaN objects (e.g. chunks of arrays with no data) are valid in Datashader
-> 1258 with np.warnings.catch_warnings():
   1259     np.warnings.filterwarnings('ignore', r'All-NaN (slice|axis) encountered')
   1260     return bypixel.pipeline(source, schema, canvas, glyph, agg, antialias=antialias)

File ~/.cache/pypoetry/virtualenvs/drakonotebook-larABRfp-py3.10/lib/python3.10/site-packages/numpy/__init__.py:320, in __getattr__(attr)
    317     from .testing import Tester
    318     return Tester
--> 320 raise AttributeError("module {!r} has no attribute "
    321                      "{!r}".format(__name__, attr))

AttributeError: module 'numpy' has no attribute 'warnings'

我使用的是Ubuntu 22.04和Python3.10,上面的代码在Jupyter笔记本上运行.以下是正在使用的库的版本:

  • 形状:2.0.1
  • Pandas :2.0.1
  • 地貌:0.12.2
  • 空间Pandas :0.4.7
  • 数据着色器:0.14.4
  • NumPy:1.24.3

此外,由Poitriy1.4.2管理的是Python环境

注:this线程是完全无用的.

推荐答案

正如我在我的NumPy版本中看到的那样,numpy.warnings只是对warnings内置的Python模块的引用:

>>> import numpy as np
>>> np.__version__
'1.21.5'
>>> np.warnings
<module 'warnings' from 'D:\\Anaconda3\\lib\\warnings.py'>

因此,解决您问题的一个可能的workaround可能是在运行时在脚本中手动添加对NumPy模块的引用:

import numpy as np
import warnings
np.warnings = warnings

<YOUR SCRIPT HERE>

然而,正如User@WarrenWeckesser所指向的线程中所描述的,您可能想要更新datashader包的版本,以便该包不再try 访问np.warnings引用,该引用后来被从NumPy中删除.

Python相关问答推荐

用ctype构建指针链

日程优化问题不知道更好的方式来呈现解决方案- Python / Gekko

无法获得指数曲线_fit来处理日期

两极:滚动组,起始指数由不同列设置

想要使用Polars groupby_Dynamic来缩减时间序列收件箱(包括空垃圾箱)

将词典写入Excel

使用Python进行网页抓取,没有页面

Python如何让代码在一个程序中工作而不在其他程序中工作

"如果发生特定错误,返回值

模型序列化器中未调用现场验证器

如何终止带有队列的Python进程?+ 队列大小的错误?

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

韦尔福德方差与Numpy方差不同

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

将数据框架与导入的Excel文件一起使用

使用密钥字典重新配置嵌套字典密钥名

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

使用Python从rotowire中抓取MLB每日阵容

Pandas:填充行并删除重复项,但保留不同的值