当前位置: 首页 > 知识库问答 >
问题:

使用geopandas将数据框中的点行转换为POLYGON

晏志明
2023-03-14

我试图找出点是否在闭合多边形中(在这个问题中:查找数据框中的点是否在多边形中,并为点指定多边形名称),但我意识到可能有另一种方法可以做到这一点:

我有这个数据框

df=
id     x_zone     y_zone
0  A1  65.422080  48.147850
1  A1  46.635708  51.165745
2  A1  46.597984  47.657444
3  A1  68.477700  44.073700
4  A3  46.635708  54.108190
5  A3  46.635708  51.844770
6  A3  63.309560  48.826878
7  A3  62.215572  54.108190

我想把它转换成

id     Polygon
0  A1  POLYGON((65.422080, 48.147850), (46.635708,  51.165745), (46.597984,  47.657444), (68.477700,  44.073700))
1  A3  POLYGON((46.635708,54.108190), (46.635708 ,51.844770), (63.309560, 48.826878),(62.215572 , 54.108190))

对积分也这样做:

df1= 

 item   x   y
0     1  50  49
1     2  60  53
2     3  70  30

item   point
0     1  POINT(50,49)
1     2  POINT(60,53)
2     3  POINT(70,30)

我从来没有使用过geopandas,在这里有点不知所措。

因此,我的问题是:如何从pandas数据帧到具有geopandas属性的数据帧?

感谢你的洞察力!

共有2个答案

谷梁俊楚
2023-03-14

我建议以下方法直接从df获取GeoDataFrame:

from shapely.geometry import Polygon
import geopandas as gpd
gdf = gpd.GeoDataFrame(geometry=df.groupby('name').apply(
    lambda g: Polygon(gpd.points_from_xy(g['x_zone'], g['y_zone']))))

它首先使用geopandas'points_from_xy创建一个点列表,然后从这个列表中创建一个Polygon对象。

姬俊远
2023-03-14

您可以实现如下目的,但必须设置正确的数据类型。我知道在ArcGIS中,必须将数据类型设置为几何体;

df.groupby('id').apply(lambda x: 'POLYGON(' + str(tuple(zip(x['x_zone'],x['y_zone'])))+')')
 类似资料:
  • 问题内容: 我正在使用导入以下的CSV文件: CSV文件示例: 问题是,当我稍后在代码中尝试使用这些值时,出现此错误: 错误是因为我要使用的数字不是用点()作为小数点分隔符而是用逗号()书写。手动将逗号更改为点后,我的程序可以工作。 我无法更改输入格式,因此必须替换DataFrame中的逗号才能使代码正常工作,我希望python无需手动执行此操作。你有什么建议吗? 问题答案: 为此有一个参数:do

  • 问题内容: 我正在尝试将Pandas DF转换为Spark one。DF头: 码: 我得到一个错误: 问题答案: 您需要确保您的pandas dataframe列适合spark推断的类型。如果您的熊猫数据框列出类似以下内容: 而且您遇到该错误,请尝试: 现在,确保实际上是您希望这些列成为的类型。基本上,当底层Java代码尝试从python中的对象推断类型时,它会使用一些观察值并做出猜测,如果该猜测

  • 问题内容: 我有如下的Python字典: 键是Unicode日期,值是整数。我想通过将日期及其对应的值作为两个单独的列将其转换为pandas数据框。示例:col1:日期col2:DateValue(日期仍为Unicode,日期值仍为整数) . 对此方向的任何帮助将不胜感激。我找不到有关熊猫文档的资源来帮助我。 我知道一种解决方案可能是将此dict中的每个键值对转换为dict,以便整个结构成为dic

  • 问题内容: 我试图将输出转换为熊猫数据框,但我很努力。我有这个清单 我想创建一个具有3列和3行的熊猫数据框。我尝试使用 但它似乎对我不起作用。任何帮助,将不胜感激。 问题答案: 您需要转换为然后:

  • 问题内容: 我希望从该网站的mma 数据中抓取数据并解析一些highcharts表。我单击的链接与selenium,然后切换到图表。我转到该站点,然后在Artem Lobov行的Pinnacle列中单击+420。这将创建一个弹出图表。然后,我切换到活动元素。我想捕获由highcharts绘制的图形以响应点击。 我以以下方式使用selenium: 我能够单击链接并获得图表,但我对highcharts

  • 问题内容: 今天,我的同事要求我将数据从垂直登台表转换为水平表。我的意思是将行转换为列。我使用了PIVOT并解决了它。但是遇到了这样的情况:如果数据字段重复自身,则在移动数据时会遇到麻烦。 这是我正在处理的测试数据: 我使用PIVOT将行数据显示为列: 输出为: 但他希望输出如下: 最重要的是,登台表中可以有多个CHILD属性。我们需要考虑这一点,并将所有儿童移动到列中。 这可能吗? 问题答案: