Python 创建一个形状多边形的数据框会给出;ValueError:LinearRing必须至少有3个坐标元组;

Python 创建一个形状多边形的数据框会给出;ValueError:LinearRing必须至少有3个坐标元组;,python,polygon,valueerror,shapely,Python,Polygon,Valueerror,Shapely,我想画一张中国各省人口的热图,我在这里发现了一个类似的问题 尽管我不得不承认我并没有完全理解这些示例代码,但我在阅读这些示例代码时没有遇到任何问题。然而,当我试图通过使用中国的shapefile来模拟这个示例时,代码运行正常,直到下面的代码 df_map = pd.DataFrame({ 'poly': [Polygon(xy) for xy in m.china], 'ward_name': [ward['NAME'] for ward in m.china_info]})

我想画一张中国各省人口的热图,我在这里发现了一个类似的问题

尽管我不得不承认我并没有完全理解这些示例代码,但我在阅读这些示例代码时没有遇到任何问题。然而,当我试图通过使用中国的shapefile来模拟这个示例时,代码运行正常,直到下面的代码

df_map = pd.DataFrame({
    'poly': [Polygon(xy) for xy in m.china],
    'ward_name': [ward['NAME'] for ward in m.china_info]})
它生成一个错误,表示

ValueError:LinearRing必须至少有3个坐标元组

有人能给我解释一下这个错误的原因吗?

报告错误时,通常最好在问题中包含完整的错误信息。Python回溯包含比最终错误消息更多的信息,包括发生错误的模块和行号

您的错误发生在
shapely
代码中。我可以通过只传递两个点的序列来重现错误消息<代码>多边形至少需要三个点。这里有一个例子

从shapely库导入
多边形

>>> from shapely.geometry import Polygon
通过三个点的顺序可以工作:

>>> p = Polygon([(0, 0), (0, 1), (1, 1)])
但只给出两点会导致错误:

>>> p = Polygon([(0, 0), (0, 1)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 229, in __init__
    self._geom, self._ndim = geos_polygon_from_py(shell, holes)
  File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 445, in geos_polygon_from_py
    geos_shell, ndim = geos_linearring_from_py(shell)
  File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 393, in geos_linearring_from_py
    "A LinearRing must have at least 3 coordinate tuples")
ValueError: A LinearRing must have at least 3 coordinate tuples
p=多边形([(0,0)、(0,1)]) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/home/warren/anaconda/lib/python2.7/site packages/shapely/geometry/polygon.py”,第229行,在__ self.\u geom,self.\u ndim=geos\u polygon\u from\u py(壳、孔) 文件“/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py”,第445行,从 geos_外壳,ndim=geos_linearring_from_py(外壳) 文件“/home/warren/anaconda/lib/python2.7/site packages/shapely/geometry/polygon.py”,第393行,从 “线性化必须至少有3个坐标元组”) ValueError:LinearRing必须至少有3个坐标元组
显然,中国有一个项目的分数少于三分。您正在使用ipython,因此可以在尝试创建
df_地图之前打印
m.china
。这将有助于你确定发生了什么。

谢谢你,沃伦。你是对的。我查了m.china的名单。它有几个元素,每个元素都少于三个点。但是我现在能做什么呢?m、 中国,就像m.london一样,直接从形状文件中读取。