<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          入門數(shù)據分析選擇Python還是SQL?七個常用操作對比!

          共 1332字,需瀏覽 3分鐘

           ·

          2020-11-07 00:45

          SQL和Python幾乎是當前數(shù)據分析師必須要了解的兩門語言,它們在處理數(shù)據時有什么區(qū)別?本文將分別用MySQLpandas來展示七個在數(shù)據分析中常用的操作,希望可以幫助掌握其中一種語言的讀者快速了解另一種方法

          在閱讀本文前,你可以訪問下方網站下載本文使用的示例數(shù)據,并導入MySQL與pandas中,一邊敲代碼一邊閱讀!

          https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/io/data/csv/tips.csv


          ? 一、選擇

          在SQL中,我們可以使用SELECT語句從表選擇數(shù)據,結果被存儲在一個結果表中,語法如下:

          SELECT?column_name,column_name
          FROM?table_name;

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

          SELECT?total_bill,?tip,?smoker,?time
          FROM?tips
          LIMIT?5;

          而在pandas中,我們可以通過將列名列表傳遞給DataFrame來完成列選擇在SQL中,進行選擇的同時還可以進行計算,比如添加一列

          SELECT?*,?tip/total_bill?as?tip_rate
          FROM?tips
          LIMIT?5;

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

          ? 二、查找

          單條件查找

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

          SELECT?column_name,column_name
          FROM?table_name
          WHERE?column_name?operator?value;

          比如查找示例數(shù)據中time = dinner的記錄

          SELECT?*
          FROM?tips
          WHERE?time?=?'Dinner'
          LIMIT?5;

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

          多條件查找

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

          SELECT?*
          FROM?tips
          WHERE?time?=?'Dinner'?AND?tip?>?5.00;

          在pandas中也有類似的操作

          查找空值

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

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

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

          SELECT?*
          FROM?frame
          WHERE?col2?IS?NULL;

          SELECT?*
          FROM?frame
          WHERE?col1?IS?NOT?NULL;


          ? 三、更新

          在SQL中使用UPDATE

          UPDATE?tips
          SET?tip?=?tip*2
          WHERE?tip?2;

          而在pandas中則有多種方法,比如使用loc函數(shù)

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


          ? 四、刪除

          在SQL中使用DELETE

          DELETE?FROM?tips
          WHERE?tip?>?9;

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

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


          ? 五、分組

          在pandas中,使用groupby()方法實現(xiàn)分組。groupby()通常是指一個過程,在該過程中,我們希望將數(shù)據集分為幾組,應用某些功能(通常是聚合),然后將各組組合在一起。

          常見的SQL操作是獲取整個數(shù)據集中每個組中的記錄數(shù)。例如,通過對性別進行分組查詢

          SELECT?sex,?count(*)
          FROM?tips
          GROUP?BY?sex;

          在pandas中的等價操作為注意,在上面代碼中,我們使用size()而不是count() 這是因為count()將函數(shù)應用于每一列,并返回每一列中非空記錄的數(shù)量!

          ? 六、連接

          在pandas可以使用join()merge()進行連接,每種方法都有參數(shù),可讓指定要執(zhí)行的聯(lián)接類型(LEFT,RIGHT,INNER,F(xiàn)ULL)或要聯(lián)接的列。

          現(xiàn)在讓我們重新創(chuàng)建兩組示例數(shù)據,分別用代碼來演示不同的連接

          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)})

          內連接

          內聯(lián)接使用比較運算符根據每個表共有的列的值匹配兩個表中的行,在SQL中實現(xiàn)內連接使用INNER JOIN

          SELECT?*
          FROM?df1
          INNER?JOIN?df2
          ??ON?df1.key?=?df2.key;

          在pandas中可以使用merge()merge()提供了一些參數(shù),可以將一個DataFrame的列與另一個DataFrame的索引連接在一起?

          左/右外聯(lián)接

          在SQL中實現(xiàn)左/右外連接可以使用LEFT OUTER JOINRIGHT OUTER JOIN

          SELECT?*
          FROM?df1
          LEFT?OUTER?JOIN?df2
          ??ON?df1.key?=?df2.key;
          ??
          SELECT?*
          FROM?df1
          RIGHT?OUTER?JOIN?df2
          ??ON?df1.key?=?df2.key;

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

          全連接

          全連接返回左表和右表中的所有行,無論是否匹配,但并不是所有的數(shù)據庫都支持,比如mysql就不支持,在SQL中實現(xiàn)全連接可以使用FULL OUTER JOIN

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

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

          ? 七、合并

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

          SELECT?city,?rank
          FROM?df1
          UNION?ALL
          SELECT?city,?rank
          FROM?df2;
          /*
          ?????????city??rank
          ??????Chicago?????1
          San?Francisco?????2
          New?York?City?????3
          ??????Chicago?????1
          ???????Boston?????4
          ??Los?Angeles?????5
          */

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

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

          以上就是本文的全部內容,可以看到在不同的場景下不同的語言有著不同的特性,如果你想深入學習了解可以進一步查閱官方文檔并多加練習!


          -END-

          來源:pandas官方文檔

          h?????????????????ttps://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html

          編譯:劉早起(有刪改)


          由于微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:


          (1)點擊頁面最上方“小詹學Python”,進入公眾號主頁。


          (2)點擊右上角的小點點,在彈出頁面點擊“設為星標”,就可以啦。


          感謝支持,比心。

          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  97天天干人操 | 日韩操逼内射 | 成人做爰黄A片免费视频网站野外 | 九九精品重口味三级在线视频 | 91豆花成人 |