geopandas 0.11版本重要新特性一览
添加微信号"CNFeffery"加入技术交流群
❝本文示例代码已上传至我的
❞Github
仓库https://github.com/CNFeffery/DataScienceStudyNotes
1 简介
大家好我是费老师,就在几天前,geopandas
发布了其0.11.0
正式版本,距离其上一个版本(0.10.2
)发布已过去大半年,在这一次的新版本更新中又为我们带来了哪些重要的新特性呢,今天的文章中我就来带大家一探究竟😋。
2 geopandas 0.11版本重要新特性一览
你可以在旧版本geopandas
的基础上进行升级,也可以新建虚拟环境直接安装0.11.0
版本,本着谨慎尝鲜的原则,我们可以使用下面的命令一口气完成新虚拟环境的创建、geopandas
及其相关依赖的安装,并安装上jupyterlab
作为IDE进行演示:
conda create -n geopandas-env python=3.8 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main -y
conda activate geopandas-env
conda install geopandas=0.11.0 pygeos pyogrio -c conda-forge -y
pip install jupyterlab -i https://pypi.douban.com/simple/
终端里执行下列命令验证一下是否已正确安装:
python -c "import geopandas as gpd;print(gpd.__version__)"
![](https://filescdn.proginn.com/129d5001d32982b82301564c74af4bd6/ec0866117bd58ea029d7df73bbf163f2.webp)
一切准备就绪,下面我们来一览此次更新中比较重要的几个特性:
2.1 更快的矢量文件读写
新版本中为read_file()
与to_file()
引入了参数engine
用于指定读写常见矢量文件基于的引擎,默认为原先的'fiona'
,可选'pyogrio'
,这是由geopandas
开发团队维护的另一个库,可大幅度提升对常见矢量文件格式如shapefile
的读写速度,以读取具有数百万个多边形的广州市全量建筑物轮廓数据为例,新的IO引擎带来近5倍的读取性能提升:
![](https://filescdn.proginn.com/8503d78f60e9d6f5210ce18c291fe51e/46e26ff01ec299738443c893858be098.webp)
以及同样接近5倍的写出性能提升:
![](https://filescdn.proginn.com/647f580fa122e700a0b56943ccef5fdc/2b3e4040b99c0c9a353d7f0d7999bd80.webp)
2.2 新增高性能矩形裁切方法clip_by_rect()
0.11
中新增针对GeoSeries
和GeoDataFrame
的方法clip_by_rect(minx, miny, maxx, maxy)
,可传入目标矩形坐标范围,快速裁切出矩形范围内的矢量,譬如我们基于前面已经读入的广州市建筑物轮廓数据,通过下面的函数随机生成边长10000米的矩形范围作为裁切素材:
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import box
# 计算得到目标GeoDataFrame范围
minx, miny, maxx, maxy = gdf.total_bounds
def generate_random_rectangle(minx, miny, maxx, maxy):
'''
研究范围内随机取得100000米边长矩形
'''
random_rectangle = [
np.random.uniform(minx, maxx - 10000),
np.random.uniform(miny, maxy - 10000)
]
return [
*random_rectangle,
random_rectangle[0] + 10000,
random_rectangle[1] + 10000,
]
调用clip_by_rect()
:
![](https://filescdn.proginn.com/8c42a99f2c8052ac3aa36b4cfae36ba9/505cef9110a47e0066b6f017bcba5089.webp)
返回的结果与原始矢量记录数量一致,其中呈现GEOMETRYCOLLECTION EMPTY
的记录说明其与目标矩形没有交集,我们利用is_empty
来反向筛选出发生裁切的矢量记录:
![](https://filescdn.proginn.com/789b51fc1d472dc61ceb71f91d22c6f0/3931e5a75313a8ea3ef88f9939974b1c.webp)
除此之外,你还可以直接将[minx, miny, maxx, maxy]
格式的输入传入经典的clip()
裁切方法中,它会在底层直接调用clip_by_rect()
并自动返回有效矢量裁切结果:
![](https://filescdn.proginn.com/f872068eb8c8a525a0897b25dbc6d820/ce3cc794b3087cf972abe3a121421c34.webp)
2.3 正确读写GIS文件中的日期时间字段
从0.11.0
版本开始,geopandas
在面对日期时间型字段时,无论是写出到GIS文件还是从GIS文件读入,都可以保证正确解析为日期时间型:
![](https://filescdn.proginn.com/e271f5adca264839a3bf5ad0b11752e9/4dcb40b7225ddac37c46ba1696b5398b.webp)
你可以在https://github.com/geopandas/geopandas/releases/tag/v0.11.0
查看完整的版本更新说明,总体而言,这次新版本更新带来的重要更新并不太多,但都颇为实用,你可以在自己的数据上使用一番。
以上就是本文的全部内容,欢迎在评论区与我进行讨论~
![](https://filescdn.proginn.com/497e52e4a636b35b735d1ccba8e17765/f13859c74d567331c3ba646a14fcf61f.webp)
加入知识星球【我们谈论数据科学】
500+小伙伴一起学习!
· 推荐阅读 ·