本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

  大家好我是费老师,前不久我在一篇文章中给大家分享过geopandas在其0.11版本中为我们带来的一些重要新特性,其中提到过新的矢量读写后端,使得我们在read_file()以及to_file()中添加参数engine='pyogrio'即可获得500%的性能提升。

  而新引擎带来的不仅是性能上的大幅提升,还带来了诸多实用功能以方便我们读写常见矢量文件,今天我就来给大家详细介绍这些新功能。

2 详解geopandas中的pyogrio读写引擎

  geopandas0.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的矢量读写引擎的更多相关文章

  1. (数据科学学习手札96)在geopandas中叠加在线地图

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 国庆期间,抽空给大家分享在geopandas中叠 ...

  2. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  3. (数据科学学习手札143)为geopandas添加gdb文件写出功能

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,很多读者朋友跟随着我先前写作的 ...

  4. (数据科学学习手札93)利用geopandas与PostGIS进行交互

    本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 PostGIS作为postgresql针对 ...

  5. (数据科学学习手札130)利用geopandas快捷绘制在线地图

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中,我为大家介绍了不久前发布的 ...

  6. (数据科学学习手札133)利用geopandas绘制拓扑着色地图

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在绘制某些地图时,为了凸显出每个独立的 ...

  7. (数据科学学习手札125)在Python中操纵json数据的最佳方式

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常使用Python的过程中,我们经常会 ...

  8. (数据科学学习手札127)在Python中使用icecream实现高效debug

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 尽管有那么多花里胡哨的debug工具和方式 ...

  9. (数据科学学习手札71)在Python中制作个性化词云图

    本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 词云图是文本挖掘中用来表征词频的数据可视化 ...

随机推荐

  1. XCTF练习题---MISC---base÷64

    XCTF练习题---MISC---base÷64 flag:flag{E33B7FD8A3B841CA9699EDDBA24B60AA} 解题步骤: 1.观察题目,下载附件 2.打开附件,观察内容和题 ...

  2. C# 核心

    C# 核心 面向对象编程概念 面向过程编程是一种以过程为中心的编程思想,分析出解决问题所需要的步骤,然后有函数把步骤一步一步实现,使用的时候一个一个依次调用. 面向对象是一种对现实世界理解和抽象的编程 ...

  3. 学习HTTP——HTTPS

    前言 因为工作需要,需要用到大量的关于 HTTP 协议的知识,目前掌握的关于 HTTP 请求以及协议的知识都是零散的,打算针对知识盲区系统的学习一些,理清概念. 为什么会出现 HTTPS 因为 HTT ...

  4. 【机器学习基础】无监督学习(3)——AutoEncoder

    前面主要回顾了无监督学习中的三种降维方法,本节主要学习另一种无监督学习AutoEncoder,这个方法在无监督学习领域应用比较广泛,尤其是其思想比较通用. AutoEncoder 0.AutoEnco ...

  5. Android开发的开始

    Android 软件 手机软件哦,目前只有一层外壳,进一步功能等待开发. 下载地址

  6. NLTK基础学习

    学习视频来自:Youtube 学习文档来自:简书 NLTK:自然语言工具包 目的:将段落拆分为句子.拆分词语,识别这些词语的词性,高亮主题,帮助机器了解文本关于什么.这个小节将解决意见挖掘或情感分析的 ...

  7. axios源码解析 - 请求拦截器

    axios请求拦截器,也就是在请求发送之前执行自定义的函数. axios源码版本 - ^0.27.2 (源码是精简版) 平时在业务中会这样去写请求拦截器,代码如下: // 创建一个新的实例 var s ...

  8. 好客租房16-jsx中的列表渲染

    如果要渲染一组数组 应该使用数组的map方法 注意:渲染列表时候添加key属性 key属性的值要保持唯一 原则:map()遍历谁 就给谁添加key属性 尽量避免索引号作为key //导入react i ...

  9. AOSP查看当前要打进系统里的都有哪些包

    发现问题: 修改系统时常常需要预置APK,这就要修改PRODUCT_PACKAGES这个变量,那么如何查看这个数组的值呢?我们可能直接在mk文件中去打印它,后来发现打印它只会显示继承关系(即继承自了哪 ...

  10. 第06组Alpha冲刺(3/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2.鲍凌函 3.曾丽莉 4. 曹兰英 5. 方梓涵 6.董翔云 7.杜筱 8.黄少丹 9. 詹鑫冰 10.吴沅静 1.3 冲刺成果展示 1.1 ...