电竞比分网-中国电竞赛事及体育赛事平台

分享

學(xué)習(xí)python中的pandas有沒有好的教程推薦?

 乙甲壬 2020-07-12
分分享一下之前結(jié)合SQL梳理過的Pandas使用教程。

相對于學(xué)習(xí)Pandas各種數(shù)據(jù)篩選操作,SQL語法顯得更加簡潔清晰,若能夠?qū)QL語法與Pandas中對應(yīng)的函數(shù)的使用方法關(guān)聯(lián)起來,對于我們應(yīng)用Pandas進(jìn)行數(shù)據(jù)篩選來講無疑是一個(gè)福音。

本文通過Pandas實(shí)現(xiàn)SQL語法中條件過濾、排序、關(guān)聯(lián)、合并、更新、刪除等簡單及復(fù)雜操作,使得我們對方法的理解更加深刻,更加得心應(yīng)手。


演示數(shù)據(jù)集

本文采用安德森鳶尾花卉(iris)數(shù)據(jù)集進(jìn)行演示,iris數(shù)據(jù)集包含150個(gè)樣本,對應(yīng)數(shù)據(jù)集的每行數(shù)據(jù)。每行數(shù)據(jù)包含每個(gè)樣本的四個(gè)特征和樣本的類別信息,因此iris數(shù)據(jù)集是一個(gè)150行*5列的二維表。

我們可以 UCI Iris dataset 中獲取或者使用 from sklearn.datasets import load_iris 方式獲取,為了演示方便我們只取其中10行數(shù)據(jù),如下:

接下來,就讓我們一起學(xué)習(xí)一下,如何Pandas實(shí)現(xiàn)SQL語法中條件過濾、排序、關(guān)聯(lián)、合并、更新、刪除等數(shù)據(jù)查詢操作。


字段查詢 SELECT

如上SQL實(shí)現(xiàn)返回每行記錄的 sl,sw,pl,pw 字段,僅返回2行記錄。我們使用Pandas實(shí)現(xiàn)如上SQL的功能,代碼如下:

簡單的條件過濾查詢 WHERE

如上SQL實(shí)現(xiàn)了查詢滿足classes=1的記錄,并返回2行。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


多條件的與或過濾查詢 WHERE AND|OR

與關(guān)系 &

如上SQL實(shí)現(xiàn)查詢同時(shí)滿足classes=1 和 pl >=5 兩個(gè)條件的記錄,并返回2行。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:

或關(guān)系 |

如上SQL實(shí)現(xiàn)查詢滿足 sl >=5 或者 pl >=5 任一條件的記錄,返回2行。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


條件過濾 空值判斷

空判斷 is null

如上SQL實(shí)現(xiàn)查詢 sl 字段為NULL的記錄,我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


非空判斷 is not null

如上SQL實(shí)現(xiàn)查詢sl字段不為 NULL 的記錄。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


排序 ORDER BY ASC|DESC

如上SQL實(shí)現(xiàn)將滿足sl字段值大于等于5的記錄,按照classes降序排序。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


更新 UPDATE

如上SQL實(shí)現(xiàn)將同時(shí)滿足pw = 1.7 和 pl >= 5的記錄中的classes字段值更新為2。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


分組統(tǒng)計(jì) GROUP BY

如上SQL實(shí)現(xiàn) 根據(jù)classes進(jìn)行分組,返回classes 及每組數(shù)量。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


分組統(tǒng)計(jì) 聚合輸出

如何SQL實(shí)現(xiàn)根據(jù)classes進(jìn)行分組,返回classes值,每個(gè)分組的pl平均值以及每個(gè)分組的sl最大值。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


刪除

如上SQL實(shí)現(xiàn)將同時(shí)滿足pw = 1.7 和 pl >= 5的記錄刪除。我們使用Pandas實(shí)現(xiàn)該SQL,代碼如下:


UNION & JOIN 演示數(shù)據(jù)集

接下來介紹如何使用Pandas進(jìn)行合并查詢及多表關(guān)聯(lián)查詢,為了演示方便,我們上面示例中的iris數(shù)據(jù)集,拆分成iris_a,iris_b兩部分,如下:


UNION 合并查詢

合并結(jié)果 UNION ALL 可能存在重復(fù)記錄

合并如下兩個(gè) SELECT 語句的結(jié)果集,需注意,UNION ALL 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列,列也必須擁有相似的數(shù)據(jù)類型。同時(shí),每條 SELECT 語句中的列的順序必須相同。

如上SQL實(shí)現(xiàn)將兩個(gè)查詢結(jié)果進(jìn)行合并,允許存在重復(fù)記錄。我們使用 pandas.concat 方法實(shí)現(xiàn)該SQL,代碼如下:

合并結(jié)果 UNION 不存在重復(fù)記錄

合并如下兩個(gè) SELECT 語句的結(jié)果集,同時(shí)也需注意,UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列,列也必須擁有相似的數(shù)據(jù)類型。同時(shí),每條 SELECT 語句中的列的順序必須相同。

如上SQL實(shí)現(xiàn)將兩個(gè)select查詢結(jié)果進(jìn)行合并,不允許存在重復(fù)記錄。我們使用 pandas.concat.drop_duplicates 方法 實(shí)現(xiàn)該SQL,代碼如下:


JOIN 連接查詢

同樣,我們依舊使用如上演示數(shù)據(jù),如下:

內(nèi)連接 INNER JOIN

獲取iris_a,iris_b兩個(gè)表中classes字段相同的記錄,并返回滿足條件的兩張表中的所有記錄。

如上SQL實(shí)現(xiàn)iris_airis_b 按照classes字段進(jìn)行內(nèi)連接。我們使用 pandas.merge(iris_a, iris_b, on='classes') 實(shí)現(xiàn)該SQL,代碼如下:

左連接 LEFT OUTER JOIN

獲取左表 iris_a 所有記錄,判斷每條數(shù)據(jù)的 classes 字段是否能匹配到右表iris_b的數(shù)據(jù),無論能否匹配到,左表 iris_a 數(shù)據(jù)都會(huì)保留。若能匹配,則左右表都保留。若不能匹配,右表iris_b字段都置空NULL,并返回保留的記錄。

如上SQL實(shí)現(xiàn)iris_a 與 iris_b 按照classes字段進(jìn)行左連接。我們使用 pandas.merge(iris_a, iris_b, on='classes', how='left') 方法實(shí)現(xiàn)該SQL,代碼如下:

右連接 RIGHT OUTER JOIN

獲取右表 iris_b 所有記錄,判斷每條數(shù)據(jù)的 classes 字段是否能匹配到右表 iris_a 的數(shù)據(jù),無論能否匹配到,右表 iris_b 數(shù)據(jù)都會(huì)保留。若能匹配,則左右表都保留。若不能匹配,左表iris_a字段都置空NULL,并返回保留的記錄。

如上SQL實(shí)現(xiàn)iris_a 與 iris_b 按照classes字段進(jìn)行右連接。我們使用 pandas.merge(iris_a, iris_b, on='classes', how='right')實(shí)現(xiàn)該SQL,代碼如下:

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多