(数据科学学习手札140)详解geopandas中基于pyogrio的矢量读写引擎
本文示例代码已上传至我的
Github
仓库https://github.com/CNFeffery/DataScienceStudyNotes
1 简介
大家好我是费老师,前不久我在一篇文章中给大家分享过geopandas
在其0.11版本中为我们带来的一些重要新特性,其中提到过新的矢量读写后端,使得我们在read_file()
以及to_file()
中添加参数engine='pyogrio'
即可获得500%的性能提升。
而新引擎带来的不仅是性能上的大幅提升,还带来了诸多实用功能以方便我们读写常见矢量文件,今天我就来给大家详细介绍这些新功能。
2 详解geopandas中的pyogrio读写引擎
geopandas
0.11版本之后新增的pyogrio
引擎,基于geopandas
团队开发的同名Python
库,其基于OGR
,而OGR
则是著名的开源栅格空间数据转换框架GDAL
的重要分支库,专注于矢量数据的高性能转换。
2.1 基于pyogrio的矢量文件读取
对于0.11及以后版本的geopandas
,向read_file()
中传入engine='pyogrio'
后,即可切换至底层基于pyogrio.read_dataframe()
的读取引擎,获取大幅度性能提升的同时也拥有了众多的新功能参数,其中比较实用的有:
2.1.1 利用columns参数指定需要读入的字段
开启pyogrio
引擎后,我们可以通过设置参数columns
来读入指定的若干字段,当你的矢量文件有很多无关紧要的字段时,可以利用此特性来整洁数据以及减少读入数据的内存消耗:
2.1.2 利用read_geometry参数设置是否忽略矢量列
如果你不需要矢量文件中的矢量信息,只需要将其当作普通表格数据进行读入,开启pyogrio
引擎后,设置read_geometry=False
即可,所形成对象的类型也会变为普通的DataFrame
:
2.1.3 利用force_2d参数强制忽略z轴信息
有些情况下,矢量数据中的坐标信息带有z轴高度信息,如果分析过程中用不上该维度信息,可以在开启pyogrio
引擎后设置force_2d=True
强制转换为2D矢量,非常方便:
2.1.4 利用skip_features与max_features参数控制读入数据规模
在开启pyogrio
引擎后,通过设置参数skip_features
可以控制从数据第0行开始需要跳过的要素记录数量:
而通过设置参数max_features
则可以控制最多读取多少行要素记录,当我们的矢量文件记录行很多,而我们又只想简单查看几行看看数据长什么样时,这个参数就很实用了:
2.1.5 利用参数where对矢量文件进行条件过滤
这个新特性非常实用,我们可以像写SQL
查询语句那样传入我们的过滤条件,从而帮助我们在读取数据时就实现比较丰富自由的条件过滤效果,值得注意的是,针对中文等由unicode字符构成的字段名,需要将其包裹在""
中进行定义,参考下图中我的做法:
2.1.6 利用sql参数在原数据上直接进行sql查询
前面我们介绍了多种用于过滤原数据的实用参数,而在在开启pyogrio
引擎后还有个非常实用的参数sql
,可以帮助我们直接书写SQL
语句对原数据进行提取(注意,其执行顺序先于上述其他过滤类参数):
但要注意的是,目前pyogrio
引擎的sql
参数,在读取诸如含有中文等unicode字符信息的shapefile
文件时,不能正常的解析内容,而针对GeoJSON
、gpkg
等其他格式矢量文件时则一切正常:
GeoJSON
文件正常
gpkg
文件正常
shapefile
文件乱码,亲测即使指定encoding
也无效
所以现阶段建议读取shapefile
文件时,可以使用columns
+where
的组合方式代替sql
以实现同样的效果。
2.2 基于pyogrio的矢量文件写出
相较于文件的读取,新引擎中涉及文件写出的功能参数就寡淡很多,只发现一个比较特别的promote_to_multi
参数,用于强制将单部件要素转换为多部件要素:
2.3 pyogrio引擎支持的所有矢量文件类型
你可以通过pyogrio.list_drivers()
查看新引擎所支持的全部矢量文件格式,基本上只有你想不到没有它覆盖不到:
更多相关内容,可以前往https://pyogrio.readthedocs.io/en/latest/api.html?#geopandas-integration
阅读了解更多。
以上就是本文的全部内容,欢迎在评论区与我进行讨论~
(数据科学学习手札140)详解geopandas中基于pyogrio的矢量读写引擎的更多相关文章
- (数据科学学习手札96)在geopandas中叠加在线地图
本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 国庆期间,抽空给大家分享在geopandas中叠 ...
- (数据科学学习手札44)在Keras中训练多层感知机
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...
- (数据科学学习手札143)为geopandas添加gdb文件写出功能
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,很多读者朋友跟随着我先前写作的 ...
- (数据科学学习手札93)利用geopandas与PostGIS进行交互
本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 PostGIS作为postgresql针对 ...
- (数据科学学习手札130)利用geopandas快捷绘制在线地图
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中,我为大家介绍了不久前发布的 ...
- (数据科学学习手札133)利用geopandas绘制拓扑着色地图
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在绘制某些地图时,为了凸显出每个独立的 ...
- (数据科学学习手札125)在Python中操纵json数据的最佳方式
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常使用Python的过程中,我们经常会 ...
- (数据科学学习手札127)在Python中使用icecream实现高效debug
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 尽管有那么多花里胡哨的debug工具和方式 ...
- (数据科学学习手札71)在Python中制作个性化词云图
本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 词云图是文本挖掘中用来表征词频的数据可视化 ...
随机推荐
- 【链表】【leetCode高频】: 19. 删除链表的倒数第 N 个结点
1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 2.算法分析 知识补充: . 分析: 题目要求是删除链表中倒数第N个结点.可以使用两个指针slow,fast. 重点是 ...
- Oracle查看表空间大小
遇到报错 java.sql.SQLException: ORA-01653: 表 MESHIS.HIS_RET_LOT_FQC 无法通过 8 (在表空间 MESHIS_DATA_TBS 中) 扩展 a ...
- 【openstack】cloudkitty组件,入门级安装(快速)
@ 目录 前言 架构 安装 配置 启动 检索并安装 CloudKitty 的仪表板 前言 什么是CloudKitty? CloudKitty是OpenStack等的评级即服务项目.该项目旨在成为云的退 ...
- 实战|Linux大文件切割
一个执着于技术的公众号 日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim.cat.grep.awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在: 执行速度缓慢,文件 ...
- vue - Vue脚手架/TodoList案例
今天做了一个案例,可以好好做做能够将之前的内容结合起来,最主要的是能对组件化编码流程有一个大概的清晰认知,这一套做下来,明天自己再做一遍复习一下,其实组件化流程倒是基本上没什么问题了,主要是很多vue ...
- 操作系统实现-printk
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们来实现最基础,也是最常见的函数print,大家都知道这个是可变参数函数,那具体怎 ...
- PCIe引脚PRSNT与热插拔
热插拔的基本目的是要让PCIe设备按照规定的顺序.原则,从系统中移除或插入到系统中来,并能正常的工作,且不影响系统的正常运行.事实上,PCIe"热插拔"的关键目的就是为前面面所提到 ...
- cefsharp + winform 内嵌网页的触屏输入焦点问题
原文 现象 我正在使用 cefsharp + winform 建立一个桌面程序用于显示网页.但程序启动后触屏点击网页中的输入框,使用键盘输入,文字输入不进去.win + D 最小化程序后,再恢复窗口才 ...
- 服务器安装mysql遇到的坑
服务器安装mysql遇到的坑 一.CentOS7安装MySQL 1.下载:MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mys ...
- 免费CDN:jsDelivr+Github 使用方法
转自 https://zhuanlan.zhihu.com/p/76951130 本文在CSDN上的链接:https://blog.csdn.net/qq_36759224/article/detai ...