本文示例代碼已上傳至我的
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
閱讀了解更多。
以上就是本文的全部內容,歡迎在評論區與我進行討論~