很多地方和 pandas 笔记:合并操作_pandas 表格判断行空则合并行居中_UQI-LIUWJ的博客-CSDN博客是类似的
1 导入数据
import geopandas
import pandas as pd
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world
cities = geopandas.read_file(geopandas.datasets.get_path('naturalearth_cities'))
cities
1 concat (使用的是Pandas的concat)
pd.concat([world,cities])
2 属性的merge
- 通过使用merge()方法实现。
- 如果一个DataFrame在左参数中,而GeoDataFrame在右参数中,结果将不再是一个GeoDataFrame。
2.0 涉及的数据
country_shapes = world[['geometry', 'iso_a3']]
country_shapes
country_names = world[['name', 'iso_a3']]
country_names
2.1 返回的数据类型比较
country_shape是GeoDataFrame;country_name是DataFrame
type(country_shapes.merge(country_names, on='iso_a3'))
#geopandas.geodataframe.GeoDataFrame
type(country_names.merge(country_shapes, on='iso_a3'))
#pandas.core.frame.DataFrame
2.2 merge操作
country_shapes.merge(country_names, on='iso_a3')
country_names.merge(country_shapes, on='iso_a3')
3 空间的join
3.1 sjoin
GeoDataFrame.sjoin()有四个参数:how和predicate
3.1.1 how
见pandas 笔记:合并操作_pandas 表格判断行空则合并行居中_UQI-LIUWJ的博客-CSDN博客的3.3小节
唯一的不同是,没有outer
3.1.2 predicate
- 指定geopandas如何根据几何关系来决定是否将一个对象的属性与另一个对象连接。
-
intersects 交叉
-
如果对象的边界或内部以任何方式与另一个对象的边界或内部相交,则返回True。
-
换句话说,如果几何对象具有任何公共的边界或内部点,则它们相交。
-
-
contains 包含
-
如果另一个对象的任何点都不位于对象的外部,且另一个对象的至少一个内部点位于对象的内部,则返回True。
-
ithin()的反函数。表达式a.contains(b) == b.within(a)始终计算为True。
-
-
within 在。。。中
-
如果对象的边界和内部仅与另一个对象的内部(而不是其边界或外部)相交,则返回True
-
-
touches 相切?
-
如果对象具有至少一个共同点且它们的内部不与另一个对象的任何部分相交,则返回True。
-
-
crosses (三维的交叉)
-
如果对象的内部与另一个对象的内部相交但不包含它,并且交集的维数小于其中一个或另一个的维数,则返回True。
-
-
overlaps (三维的重叠)
-
如果几何体共有多个但不是全部的公共点,维数相同,并且几何体内部的交集的维数与几何体本身的维数相同,则返回True
-
-
3.1.3 lsuffix
- 如果merge之后,某一个column的名字冲突了,那么在左边GeoDataFrame原先Column名字的右边加上_lsuffix
- 默认为left
3.1.4 rsuffix
- 如果merge之后,某一个column的名字冲突了,那么在右边GeoDataFrame原先Column名字的右边加上_lsuffix
- 默认为right
3.2 sjoin_nearest
GeoDataFrame.sjoin_nearest(right,
how='inner',
max_distance=None,
lsuffix='left',
rsuffix='right',
distance_col=None)
基于几何体之间的距离将两个GeoDataFrame进行空间连接。
结果将包括单个输入记录的多个输出记录,其中存在多个等距离最近或相交邻居。
3.2.1 两个额外的参数
- max_distance
- 指定匹配几何图形的最大搜索半径。
- 这在某些情况下可能会对性能产生相当大的影响
- distance_col
- 如果设置了distance_col,结果GeoDataFrame将包含一个名为distance_col的列,其中包含输入几何图形与最近几何图形之间计算的距离。