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

          超全的pandas數(shù)據(jù)分析常用函數(shù)總結(jié):下篇

          共 13619字,需瀏覽 28分鐘

           ·

          2021-03-14 02:08

                   
                       
          ↑↑↑關注后"星標"簡說Python
                        
          人人都可以簡單入門Python、爬蟲、數(shù)據(jù)分析
           簡說Python推薦 
          來源|凹凸數(shù)據(jù)
          作者|雅痞紳士JM


          大家好


          基礎知識在數(shù)據(jù)分析中就像是九陽神功,熟練的掌握,加以運用,就可以練就深厚的內(nèi)力,成為絕頂高手自然不在話下!


          為了更好地學習數(shù)據(jù)分析,我對于數(shù)據(jù)分析中pandas這一模塊里面常用的函數(shù)進行了總結(jié)。整篇總結(jié),在詳盡且通俗易懂的基礎上,我力求使其有很強的條理性和邏輯性,所以制作了思維導圖,對于每一個值得深究的函數(shù)用法,我也會附上官方鏈接,方便大家繼續(xù)深入學習。


          文章中的所有代碼都會有講解和注釋,絕大部分也都會配有運行結(jié)果,醬紫的話,整篇總結(jié)篇幅量自然不小,所以我分成了上下兩篇,這里是下篇。


          《超全的pandas數(shù)據(jù)分析常用函數(shù)總結(jié):上篇》


          5. 數(shù)據(jù)預處理


          先創(chuàng)建一個data2數(shù)據(jù)集


          data2=pd.DataFrame({
          "id":np.arange(102,105),
          "profit":[1,10,2]
          })
          data2


          輸出結(jié)果:


          再創(chuàng)建一個data3數(shù)據(jù)集


          data3=pd.DataFrame({
          "id":np.arange(111,113),
          "money":[106,51]
          })
          data3


          輸出結(jié)果:



          5.1 數(shù)據(jù)的合并


          用merge合并


          DataFrame.merge(self,right,how =‘inner’,on = None)


          • right指要合并的對象

          • on指要加入的列或索引級別名稱,必須在兩個DataFrame中都可以找到。

          • how決定要執(zhí)行的合并類型:left(使用左框架中的鍵)、right、inner(交集,默認)、outer(并集)


          data_new=pd.merge(data,data2,on='id',how='inner')      # 默認取交集
          data_new=pd.merge(data,data2,on='id',how='outer') # 取并集,沒有值的地方填充NaN
          data.merge(data2,on='id',how='inner') # 另一種寫法,輸出結(jié)果見下方


          輸出結(jié)果:



          更多關于pandas.DataFrame.merge的用法,戳下面官方鏈接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html


          data.merge(data2,on='id',how='left')     # 使用左框架中的鍵


          輸出結(jié)果:



          用append合并


          data.append(data2)    # 在原數(shù)據(jù)集的下方合并入新的數(shù)據(jù)集


          輸出結(jié)果:



          用join合并


          用下面這種方式會報錯:列重疊,且沒有指定后綴,因為上面的數(shù)據(jù)data和data2都有“id”列,所以需要給id列指明后綴。


          data.join(data2)        # 會報錯


          第一種修改方式:


          data.join(data2,lsuffix='_data', rsuffix='_data2')


          輸出結(jié)果:



          第二種修改方式:


          data.set_index('id').join(data2.set_index('id'))


          輸出結(jié)果:



          更多關于pandas.DataFrame.join的用法,戳下面官方鏈接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.join.html


          用concat合并


          pandas.concat(objs,axis = 0,ignore_index = False,keys = None)


          • objs:Series,DataFrame或Panel對象的序列或映射。

          • axis:串聯(lián)的軸,默認為0,即以索引串聯(lián)(豎直拼接);如果為1,則以列串聯(lián)(水平拼接)

          • ignore_index:清除現(xiàn)有索引并將其重置,默認為False。

          • key:在數(shù)據(jù)的最外層添加層次結(jié)構(gòu)索引。


          data_new=pd.concat([data,data2,data3],axis = 1,keys=['data', 'data2','data3'])
          data_new


          輸出結(jié)果:


          更多關于pandas.concat的用法,戳下面官方鏈接:
          https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.concat.html



          5.2 設置索引列


          data.set_index("id")      # 設置id為索引列


          輸出結(jié)果:



          data.reset_index(drop=True)    # 重置索引列,并且避免將舊索引添加為列


          輸出結(jié)果:



          5.3 按照特定列的值排序:


          按照索引列進行排序:


          data.sort_index()


          按照money的值進行排序:


          data.sort_values(by="money",ascending = True)    # ascending默認為True,即升序.


          輸出結(jié)果:



          5.4 分類顯示


          如果money列的值>=10, level列顯示high,否則顯示low:


          data['level'] = np.where(data['money']>=10, 'high', 'low')
          data


          輸出結(jié)果:



          5.5 分組標記


          data.loc[(data['level']=="high") & (data['origin']=="China"),"sign"]="棒"
          data


          輸出結(jié)果:



          5.6 切割數(shù)據(jù)


          對date字段的值依次進行分列,并創(chuàng)建數(shù)據(jù)表,索引值為data的索引列,列名稱為year\month\day。


          data_split = pd.DataFrame((x.split('-') for x in data['date']), index=data.index, columns=['year','month','day'])
          data_split


          輸出結(jié)果:



          再與原數(shù)據(jù)表進行匹配:


          pd.concat([data,data_split],axis=1)


          輸出結(jié)果:



          6. 數(shù)據(jù)提取


          下面這部分會比較繞:


          loc函數(shù)按標簽值進行提取,iloc按位置進行提取pandas.DataFrame.loc() 允許輸入的值:

          • 單個標簽,例如5或’a’,(請注意,5被解釋為索引的標簽,而不是沿索引的整數(shù)位置)。

          • 標簽列表或數(shù)組,例如。[‘a(chǎn)’, ‘b’, ‘c’]

          • 具有標簽的切片對象,例如’a’:‘f’,切片的開始和結(jié)束都包括在內(nèi)。


          更多關于pandas.DataFrame.loc的用法,戳下面官方鏈接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html#pandas.DataFrame.loc


          pandas.DataFrame.iloc()


          允許輸入的值:整數(shù)5、整數(shù)列表或數(shù)組[4,3,0]、整數(shù)的切片對象1:7


          更多關于pandas.DataFrame.iloc的用法,戳下面官方鏈接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html#pandas.DataFrame.iloc



          6.1 單行索引


          data.loc[6]    # 提取索引值為6的那一行(即輸出第7行)


          輸出結(jié)果:



          data.iloc[6]    # 提取第7行


          輸出結(jié)果同上!



          6.2 區(qū)域索引


          6.2.1 用loc取連續(xù)的多行


          提取索引值為2到索引值為4的所有行,即提取第3行到第5行,注意:此時切片的開始和結(jié)束都包括在內(nèi)。


          data.loc[2:4]


          輸出結(jié)果:



          提取“2020-03-13”之前的所有數(shù)據(jù)


          data.loc[:"2020-03-13"]


          輸出結(jié)果:



          6.2.2 用loc取不連續(xù)的多行


          提取索引值為2和索引值為4的所有行,即提取第3行和第5行。


          data.loc[[2,4]]


          輸出結(jié)果:



          6.2.3 用loc取具體值


          data.loc[6,"id"]


          輸出結(jié)果:107


          6.2.4 用iloc取連續(xù)的多行


          提取第3行到第6行


          data.iloc[2:6]


          輸出結(jié)果:



          6.2.5 用iloc取連續(xù)的多行和多列


          提取第3行到第6行,第4列到第5列的值,取得是行和列交叉點的位置。


          data.iloc[2:6,3:5]


          輸出結(jié)果:



          6.2.6 用iloc取不連續(xù)的多行和多列


          提取第3行和第6行,第4列和第5列的交叉值


          data.iloc[[2,6],[3,5]]


          輸出結(jié)果:



          6.2.7 用iloc取具體值


          提取第3行第7列的值


          data.iloc[2,6]


          輸出結(jié)果:‘high’


          總結(jié):文字變代碼,數(shù)值少1;代碼變文字,數(shù)值加1;代碼從0開始計數(shù);文字從1開始計數(shù)。



          6.3 值的判斷


          方式一:判斷origin列的值是否為China


          data['origin']=="China"


          方式二:判斷department列的值是否為水果


          data['department'].isin(['水果'])


          輸出結(jié)果:



          data['department'].isin(['水果']).sum()     # 對判斷后的值進行匯總


          輸出結(jié)果:1


          6.4 提取符合判斷的值


          data.loc[data['origin'].isin(['Thailand'])]    # 將產(chǎn)地是泰國的數(shù)據(jù)進行提取


          輸出結(jié)果:



          7. 數(shù)據(jù)篩選


          7.1 使用與、或、非進行篩選


          將滿足origin是China且money小于35這兩個條件的數(shù)據(jù),返回其id、date、money、product、department、origin值。


          data.loc[(data['origin']=="China") & (data['money']<35),['id','date','money','product','department','origin']]


          輸出結(jié)果:



          將滿足origin是China或者money小于35這兩個條件之中任意一個條件的數(shù)據(jù),返回其id、date、money、product、department、origin值。


          data.loc[(data['origin']=="China") | (data['money']<35),['id','date','money','product','department','origin']]


          輸出結(jié)果:



          將滿足origin是China且money不小于10這兩個條件的數(shù)據(jù),返回其id、date、money、product、department、origin值。


          data.loc[(data['origin']=="China") != (data['money']<10),['id','date','money','product','department','origin']]


          輸出結(jié)果:



          7.2 使用query函數(shù)進行篩選


          data.query('department=="飲料"')              # 單個條件篩選
          data.query('department==["飲料","零食"]') # 多個條件篩選


          輸出結(jié)果:


          更多關于pandas.DataFrame.query的用法,戳下面官方鏈接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html



          7.3 對結(jié)果進行計數(shù)求和


          data.query('department=="飲料"').count()         # 對飲料類型的數(shù)據(jù)進行篩選后計數(shù)
          data.query('department=="飲料"').money.count() # 對篩選后的數(shù)據(jù)按照money進行計數(shù)


          輸出結(jié)果:2

          data.query('department=="飲料"').money.sum()    # 在篩選后的數(shù)據(jù)中,對money進行求和


          輸出結(jié)果:9.0


          8. 數(shù)據(jù)匯總


          8.1 以department屬性對所有列進行計數(shù)匯總


          data.groupby("department").count()


          輸出結(jié)果:



          8.2 以department屬性分組之后,對id字段進行計數(shù)匯總


          data.groupby("department")['id'].count()


          輸出結(jié)果:




          8.3 以兩個屬性進行分組計數(shù)


          data.groupby(["department","origin"]).count()


          輸出結(jié)果:



          8.4 以department屬性進行分組匯總并計算money的合計與均值


          data.groupby("department")['money'].agg([len, np.sum, np.mean])


          輸出結(jié)果:



          9. 數(shù)據(jù)統(tǒng)計


          9.1 數(shù)據(jù)采樣


          pandas.DataFrame.sample(n = None,replace = False,weights = None)


          • n:樣本數(shù)

          • replace:樣本有無更換(有無放回)(默認不放回)

          • weights:權(quán)重

          更多關于pandas.DataFrame.sample的用法,戳下面官方鏈接:https://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.sample.html


          data.sample(3,replace=True,weights=[0.1,0.1,0.2,0.2,0.1,0.1,0.1,0.1,0,0])


          輸出結(jié)果:




          9.2 描述性統(tǒng)計


          data.describe().round(2).T      # round表示小數(shù)位數(shù),T表示轉(zhuǎn)置(這一函數(shù)之前提及過)


          輸出結(jié)果:





          9.3 計算標準差


          data['money'].std()


          輸出結(jié)果:18.14754345175493


          9.4 計算協(xié)方差


          data.cov()


          輸出結(jié)果:



          9.5 相關性分析


          data.corr()


          輸出結(jié)果:



          思維導圖


          完整思維導圖電子版(PDF)獲取:

          掃下方二維碼,添加我好友后,觀看朋友圈最新動態(tài)即可獲取。

          掃碼回復:2021

          獲取最新學習資源


          參考資料: 

          • pandas官網(wǎng)

          • pandas用法總結(jié)

          • Pandas 文本數(shù)據(jù)方法


          【留言贈書】
          《Python編程寶典:迅速提高編程水平的100個關鍵技能》
          (1)實戰(zhàn)技能:本書講解了Python編程從入門到精通可能涉及的100個關鍵技能。 
          (2)關鍵練習:100個關鍵技能,對應100個關鍵練習,能學會用。 
          (3)關鍵視頻:重點、難點,都有視頻講解,降低了學習難度曲線。

          【贈書規(guī)則】

          本文留言說說你關注本公眾號最想學習哪方面知識,解決哪些問題,如果方便還可以直接留言說出你的問題和需求,留言點贊倒數(shù)第一和倒數(shù)第二的朋友將獲得贈書一本。(相關留言才可以被移入精選參與活動)

          活動截止時間:2021.3.12 20:00


          推薦大家關注兩個公號

          分享程序員生活、互聯(lián)網(wǎng)資訊、理財復盤日記等
          專注于Java學習分享,從零和你一起學Java

          關注后回復【1024】
          送上獨家資料
          ◆◆◆
          歡迎大家圍觀朋友圈,我的微信:pythonbrief
                                        
          學習更多:
          整理了我開始分享學習筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機器學習等方面,別再說不知道該從哪開始,實戰(zhàn)哪里找了

          點贊”傳統(tǒng)美德不能丟 

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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操操| 久久久免费黄色 | 偷拍自拍第一页 | 狠狠干超碰 | 青娱乐精品在线视频 |