入門資料分析選擇Python還是SQL?七個常用操作對比

千鋒Python唐小強發表於2020-11-05

SQL和Python幾乎是當前資料分析師必須要了解的兩門語言,它們在處理資料時有什麼區別?本文將分別用 MySQLpandas來展示七個在資料分析中常用的操作,希望可以 幫助掌握其中一種語言的讀者快速瞭解另一種方法(文末也有給大家整理兩種方法的影片教程,大家按需學習就好)


一、選擇

在SQL中,我們可以使用 SELECT語句從表選擇資料,結果被儲存在一個結果表中,語法如下:

SELECT column_name,column_nameFROM table_name;

如果 不想顯示全部的記錄,可以使用 TOPLIMIT來限制行數。因此選擇tips表中的部分列可以使用下面的語句

SELECT total_bill, tip, smoker, timeFROM tipsLIMIT 5;
入門資料分析選擇Python還是SQL?七個常用操作對比

而在pandas中,我們可以透過 將列名列表傳遞給DataFrame來完成列選擇

入門資料分析選擇Python還是SQL?七個常用操作對比

在SQL中,進行選擇的同時還可以進行計算,比如新增一列

SELECT *, tip/total_bill as tip_rateFROM tipsLIMIT 5;
入門資料分析選擇Python還是SQL?七個常用操作對比

在pandas中使用 DataFrame.assign()同樣可以完成這個操作

入門資料分析選擇Python還是SQL?七個常用操作對比

二、查詢

單條件查詢

在SQL中, WHERE子句用於提取那些滿足指定條件的記錄,語法如下

SELECT column_name,column_nameFROM table_nameWHERE column_name operator value;

比如查詢示例資料中 time = dinner的記錄

SELECT *FROM tipsWHERE time = 'Dinner'LIMIT 5;
入門資料分析選擇Python還是SQL?七個常用操作對比

而在pandas中,按照條件進行查詢則可以有多種形式,比如可以 將含有 True/False的Series物件傳遞給DataFrame,並返回所有帶有True的行

入門資料分析選擇Python還是SQL?七個常用操作對比

多條件查詢

在SQL中,進行多條件查詢可以使用AND/OR來完成

SELECT *FROM tipsWHERE time = 'Dinner' AND tip > 5.00;
入門資料分析選擇Python還是SQL?七個常用操作對比

在pandas中也有類似的操作

入門資料分析選擇Python還是SQL?七個常用操作對比

查詢空值

在pandas檢查空值是使用 notna()isna()方法完成的。

frame[frame['col1'].notna()]

在SQL中可以使用 IS NULLIS NOT NULL完成

SELECT *FROM frameWHERE col2 IS NULL;SELECT *FROM frameWHERE col1 IS NOT NULL;


三、更新

在SQL中使用 UPDATE

UPDATE tipsSET tip = tip*2WHERE tip < 2;

而在pandas中則有多種方法,比如使用 loc函式

tips.loc[tips['tip'] < 2, 'tip'] *= 2


四、刪除

在SQL中使用DELETE

DELETE FROM tipsWHERE tip > 9;

在pandas中,我們選擇應保留的行,而不是刪除它們

tips = tips.loc[tips['tip'] <= 9]


五、分組

在pandas中,使用 groupby()方法實現分組。 groupby()通常是指一個過程,在該過程中,我們希望將資料集分為幾組,應用某些功能(通常是聚合),然後將各組組合在一起。

常見的SQL操作是獲取整個資料集中每個組中的記錄數。例如,透過 對性別進行分組查詢

SELECT sex, count(*)FROM tipsGROUP BY sex;
入門資料分析選擇Python還是SQL?七個常用操作對比

在pandas中的等價操作為

入門資料分析選擇Python還是SQL?七個常用操作對比

注意,在上面程式碼中,我們 使用size()而不是count() 這是因為count()將函式應用於每一列,並返回每一列中非空記錄的數量!

六、連線

在pandas可以使用 join()merge()進行連線,每種方法都有引數,可讓指定要執行的聯接型別(LEFT,RIGHT,INNER,FULL)或要聯接的列。

現在讓我們重新建立兩組示例資料,分別用程式碼來演示不同的連線

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
   ....:                     'value': np.random.randn(4)})
   ....: 
df2 = pd.DataFrame({'key': ['B', 'D', 'D', 'E'],
   ....:                     'value': np.random.randn(4)})

內連線

內聯接使用比較運算子根據每個表共有的列的值匹配兩個表中的行,在SQL中實現內連線使用 INNER JOIN

SELECT *FROM df1INNER JOIN df2
  ON df1.key = df2.key;

在pandas中可以使用 merge()

入門資料分析選擇Python還是SQL?七個常用操作對比

merge()提供了一些引數,可以將一個DataFrame的列與另一個DataFrame的索引連線在一起

入門資料分析選擇Python還是SQL?七個常用操作對比

左/右外聯接

在SQL中實現左/右外連線可以使用 LEFT OUTER JOINRIGHT OUTER JOIN

SELECT *FROM df1LEFT OUTER JOIN df2
  ON df1.key = df2.key;
  SELECT *FROM df1RIGHT OUTER JOIN df2
  ON df1.key = df2.key;

在pandas中實現同樣可以使用 merge()並指定how關鍵字為 left或者 right即可

入門資料分析選擇Python還是SQL?七個常用操作對比

全連線

全連線返回左表和右表中的所有行,無論是否匹配, 但並不是所有的資料庫都支援,比如mysql就不支援,在SQL中實現全連線可以使用 FULL OUTER JOIN

SELECT *FROM df1FULL OUTER JOIN df2
  ON df1.key = df2.key;

在pandas中實現同樣可以使用 merge()並指定how關鍵字為 outer

入門資料分析選擇Python還是SQL?七個常用操作對比

七、合併

SQL中UNION操作用於 合併兩個或多個SELECT語句的結果集, UNIONUNION ALL類似,但是UNION將刪除重複的行。示例程式碼如下

SELECT city, rankFROM df1UNION ALLSELECT city, rankFROM df2;/*
         city  rank
      Chicago     1
San Francisco     2
New York City     3
      Chicago     1
       Boston     4
  Los Angeles     5
*/

在pandas中可以使用 concat()實現 UNION ALL

入門資料分析選擇Python還是SQL?七個常用操作對比

上面是 UNION ALL保留重複值,如果希望刪除可以使用  drop_duplicates()

入門資料分析選擇Python還是SQL?七個常用操作對比

以上就是本文的全部內容,可以看到在不同的場景下不同的語言有著不同的特性


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2732437/,如需轉載,請註明出處,否則將追究法律責任。

相關文章