1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 1332字,需瀏覽 3分鐘

         ·

        2020-11-07 00:45

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

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

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


        ? 一、選擇

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

        SELECT?column_name,column_name
        FROM?table_name;

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

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

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

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

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

        ? 二、查找

        單條件查找

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

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

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

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

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

        多條件查找

        在SQL中,進(jìn)行多條件查找可以使用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中,我們選擇應(yīng)保留的行,而不是刪除它們

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


        ? 五、分組

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

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

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

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

        ? 六、連接

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

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

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

        內(nèi)連接

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

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

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

        左/右外聯(lián)接

        在SQL中實(shí)現(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中實(shí)現(xiàn)同樣可以使用merge()并指定how關(guān)鍵字為left或者right即可

        全連接

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

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

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

        ? 七、合并

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

        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()實(shí)現(xiàn)UNION ALL

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

        以上就是本文的全部?jī)?nèi)容,可以看到在不同的場(chǎng)景下不同的語言有著不同的特性,如果你想深入學(xué)習(xí)了解可以進(jìn)一步查閱官方文檔并多加練習(xí)!


        -END-

        來源:pandas官方文檔

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

        編譯:劉早起(有刪改)


        由于微信平臺(tái)算法改版,公號(hào)內(nèi)容將不再以時(shí)間排序展示,如果大家想第一時(shí)間看到我們的推送,強(qiáng)烈建議星標(biāo)我們和給我們多點(diǎn)點(diǎn)【在看】。星標(biāo)具體步驟為:


        (1)點(diǎn)擊頁(yè)面最上方“小詹學(xué)Python”,進(jìn)入公眾號(hào)主頁(yè)。


        (2)點(diǎn)擊右上角的小點(diǎn)點(diǎn),在彈出頁(yè)面點(diǎn)擊“設(shè)為星標(biāo)”,就可以啦。


        感謝支持,比心。

        瀏覽 49
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人免费A片在线观看直播96 | 日韩精品一区二区三区四虎视频 | 毛片无码一区二区三区A片视频 | 农村妇女毛片 | 色噜噜狠狠躁夜夜躁人人爽免费 | 亚洲综合五月天 | 青娱乐无码视频 | 91国内精品视频 | 少妇一级淫片免费放正片 | 晨勃坐上去好爽h |