當前位置:
首頁 > 知識 > 通過 SQL 查詢學習 Pandas 數據處理

通過 SQL 查詢學習 Pandas 數據處理

作者:張吉

來源:http://shzhangji.com/cnblogs/2017/07/23/learn-pandas-from-a-sql-perspective/

Pandas 是一款廣泛使用的數據處理工具。結合 NumPy 和 Matplotlib 類庫,我們可以在內存中進行高性能的數據清洗、轉換、分析及可視化工作。雖然 Python 本身是一門非常容易學習的語言,但要熟練掌握 Pandas 豐富的 API 介面及正確的使用方式,還是需要投入一定時間的。

對於數據開發工程師或分析師而言,SQL 語言是標準的數據查詢工具。本文提供了一系列的示例,如何將常見的 SQL 查詢語句使用 Pandas 來實現。

Pandas 的安裝和基本概念並不在本文講述範圍內,請讀者到官網上閱讀相關文檔,或者閱讀《利用 Python 進行數據分析》一書。我推薦大家使用 Anaconda Python 套件,其中集成了 Spyder 集成開發環境。在運行下文的代碼之前,請先引入 Pandas 和 NumPy 包:

- 讀取數據

首先,我們需要將數據載入到工作區(內存)。Pandas 原生支持非常多的數據格式,CSV 是較常見的一種。我們以航班延誤時間數據集為例(下載地址):

我們可以使用 函數載入它:

這條命令會將 文件讀入內存,使用首行作為列名,並自動檢測每一列的數據類型。其中,由於 一列的日期格式是 ,自動轉換成數字後會失去月份的前異零(02 月的 0),因此我們顯式指定了該列的 ,告知 Pandas 保留原值。

用於查看數據集的前 N 行,功能類似於 。如果要實現 ,可以使用 。此外,IPython 終端默認只顯示 60 行數據,我們可以通過以下方法修改設置:

另外一種常見的數據源是關係型資料庫,Pandas 也提供了內置支持:

如果要將 DataFrame 保存到文件或資料庫中去,可以分別使用 和 函數。

- 選擇列

語句在 SQL 中用於選擇需要的列,並對數據做清洗和轉換。

SQL 提供了諸多函數,大部分都可以用 Pandas 來實現,而且我們也很容易用 Python 編寫自定義函數。下面我將列舉一些常用的函數。

字元串函數

Pandas 的字元串函數可以通過 DateFrame 和 Series 的 屬性來調用,如 。

Pandas 有一個名為廣播的特性(broadcast),簡單來說就是能夠將低維數據(包括單個標量)和高維數據進行結合和處理。例如:

Pandas 還內置了很多字元串函數,它們的用法和 SQL 有一定區別,但功能更強。完整列表可以參考文檔 Working with Text Data。

日期函數

用於將各種日期字元串轉換成標準的 類型。日期類型的 Series 都會有一個 屬性,從中可以獲取到有關日期時間的信息,具體請參考文檔 Time Series / Date functionality。

- 選擇行

在 Pandas 中使用邏輯表達式後,會返回一個布爾型的 Series,通過它可以對數據集進行過濾:

我們可以用位運算符來組合多個查詢條件:

對於 和 ,也提供了相應的內置函數:

此外,Pandas 還提供了 方法,可以使用字元串表達式來編寫過濾條件:

其實,Pandas 提供了功能強大的數據選取工具,很多是無法用 SQL 表達出來的,建議詳細閱讀 Indexing and Selecting Data 文檔,其中包含了豐富的示例。

- 匯總

聚合運算包含了兩個部分,一是分組欄位,二是聚合函數。我們可以傳遞多個分組欄位給 ,也能夠指定多個聚合函數:

我們還可以將函數的運行結果作為分組條件。更多示例請見 Group By: split-apply-combine。

- 排序

Pandas 中有兩類排序,按索引和按數值。如果不了解 Pandas 的索引,還請自行查閱相關教程。

- 關聯查詢

如果聯合查詢的鍵是同名的,可以直接使用 。默認的關聯方式是 ( ),其它還有左外連接( )、右外連接( )、以及 ( )。

可用於實現 查詢。 更多關聯查詢的示例請參考 Merge, join, and concatenate。

最後,我們經常會需要在分組中按某種規則排序,並獲得前幾位的記錄。MySQL 中需要通過變數來實現,Pandas 中則可以使用 函數:

參考資料

題圖:pexels,CC0 授權。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 編程派 的精彩文章:

Python 官方推薦的一款打包工具
程序員為什麼要堅持不信任原則?
數據科學家如何使用Python和R組合完成任務
Python 面向文檔編程的正確姿勢

TAG:編程派 |