超全的pandas數據分析常用函數總結(下篇)

2021-01-13 CDA數據分析師

上篇文章中,小編給大家總結了數據分析中pandas這一模塊裡面常用函數的四個部分的內容,分別為導入模塊、創建數據集並讀取、數據查看與數據清洗,現在給大家介紹下篇的內容。

來源 | 凹凸數據

5. 數據預處理

先創建一個data2數據集

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

輸出結果:

再創建一個data3數據集

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

輸出結果:

5.1 數據的合併

用merge合併

DataFrame.merge(self,right,how =『inner』,on = None)

right指要合併的對象on指要加入的列或索引級別名稱,必須在兩個DataFrame中都可以找到。how決定要執行的合併類型:left(使用左框架中的鍵)、right、inner(交集,默認)、outer(併集)data_new=pd.merge(data,data2,on='id',how='inner') # 默認取交集data_new=pd.merge(data,data2,on='id',how='outer') # 取併集,沒有值的地方填充NaNdata.merge(data2,on='id',how='inner') # 另一種寫法,輸出結果見下方

輸出結果:

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

輸出結果:

用append合併

data.append(data2) # 在原數據集的下方合併入新的數據集

輸出結果:

用join合併

用下面這種方式會報錯:列重疊,且沒有指定後綴,因為上面的數據data和data2都有「id」列,所以需要給id列指明後綴。

data.join(data2) # 會報錯

第一種修改方式:

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

輸出結果:

第二種修改方式:

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

輸出結果:

用concat合併

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

objs:Series,DataFrame或Panel對象的序列或映射。axis:串聯的軸,默認為0,即以索引串聯(豎直拼接);如果為1,則以列串聯(水平拼接)ignore_index:清除現有索引並將其重置,默認為False。key:在數據的最外層添加層次結構索引。data_new=pd.concat([data,data2,data3],axis = 1,keys=['data', 'data2','data3'])data_new

輸出結果:

5.2 設置索引列

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

輸出結果:

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

輸出結果:

5.3 按照特定列的值排序:

按照索引列進行排序:

data.sort_index()

按照money的值進行排序:

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

輸出結果:

5.4 分類顯示

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

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

輸出結果:

5.5 分組標記

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

輸出結果:

5.6 切割數據

對date欄位的值依次進行分列,並創建數據表,索引值為data的索引列,列名稱為year\month\day。

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

輸出結果:

再與原數據表進行匹配:

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

輸出結果:

6. 數據提取

下面這部分會比較繞:

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

單個標籤,例如5或』a』,(請注意,5被解釋為索引的標籤,而不是沿索引的整數位置)。標籤列表或數組,例如。[『a』, 『b』, 『c』]具有標籤的切片對象,例如』a』:『f』,切片的開始和結束都包括在內。pandas.DataFrame.iloc()

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

6.1 單行索引

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

輸出結果:

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

輸出結果同上!

6.2 區域索引

6.2.1 用loc取連續的多行

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

data.loc[2:4]

輸出結果:

提取「2020-03-13」之前的所有數據

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

輸出結果:

6.2.2 用loc取不連續的多行

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

data.loc[[2,4]]

輸出結果:

6.2.3 用loc取具體值

data.loc[6,"id"]

輸出結果:107

6.2.4 用iloc取連續的多行

提取第3行到第6行

data.iloc[2:6]

輸出結果:

6.2.5 用iloc取連續的多行和多列

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

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

輸出結果:

6.2.6 用iloc取不連續的多行和多列

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

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

輸出結果:

6.2.7 用iloc取具體值

提取第3行第7列的值

data.iloc[2,6]

輸出結果:『high』

總結:文字變代碼,數值少1;代碼變文字,數值加1;代碼從0開始計數;文字從1開始計數。

6.3 值的判斷

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

data['origin']=="China"

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

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

輸出結果:

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

輸出結果:1

6.4 提取符合判斷的值

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

輸出結果:

7. 數據篩選

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

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

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

輸出結果:

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

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

輸出結果:

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

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

輸出結果:

7.2 使用query函數進行篩選

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

輸出結果:

7.3 對結果進行計數求和

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

輸出結果:2

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

輸出結果:9.0

8. 數據匯總

8.1 以department屬性對所有列進行計數匯總

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

輸出結果:

8.2 以department屬性分組之後,對id欄位進行計數匯總

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

輸出結果:

8.3 以兩個屬性進行分組計數

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

輸出結果:

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

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

輸出結果:

9. 數據統計

9.1 數據採樣

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

n:樣本數replace:樣本有無更換(有無放回)(默認不放回)weights:權重data.sample(3,replace=True,weights=[0.1,0.1,0.2,0.2,0.1,0.1,0.1,0.1,0,0])

輸出結果:

9.2 描述性統計

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

輸出結果:

9.3 計算標準差

data['money'].std()

輸出結果:18.14754345175493

9.4 計算協方差

data.cov()

輸出結果:

9.5 相關性分析

data.corr()

輸出結果:

相關焦點

  • 十分鐘學習pandas!pandas常用操作總結!
    學習Python, 當然少不了pandas,pandas是python數據科學中的必備工具,熟練使用pandas是從sql boy/girl 跨越到一名優秀的數據分析師傅的必備技能。這篇pandas常用操作總結幫大家回顧下pandas的常用語法,尤其是我們分析數據時常用的方法。
  • 20個Pandas函數詳解
    它提供了許多函數和方法來加快數據分析過程。pandas之所以如此普遍,是因為它具有強大的功能,以及他簡單的語法和靈活性。在這篇文章中,我將舉例來解釋20個常用的pandas函數。有些是很常見的,我敢肯定你以前用過。有些對你來說可能是新的。所有函數都將為你的數據分析過程增加價值。
  • Pandas的介紹與基本使用
    1、什麼是Pandas當大家談論到數據分析時,提及最多的語言就是Python和SQL,而Python之所以適合做數據分析,就是因為他有很多強大的第三方庫來協助,pandas就是其中之一,它是基於Numpy構建的,正因pandas的出現,讓Python語言也成為使用最廣泛而且強大的數據分析環境之一。
  • python時間序列分析之_用pandas中的rolling函數計算時間窗口數據
    如下面的示意圖所示,其中時間序列數據代表的是15日每日的溫度,現在我們以3天為一個窗口,將這個窗口從左至右依次滑動,統計出3天的平均值作為這個點的值,比如3號的溫度就是1號、2號、3號的平均溫度,通過示意圖我們已經理解了滑動窗口,下面我們就看看pandas中使用的函數及各參數的含義。
  • pandas數據處理:常用卻不甚了解的函數,pd.read_excel()
    人們經常用pandas處理表格型數據,時常需要讀入excel表格數據,很多人一般都是直接這麼用:pd.read_excel(「文件路徑文件名」),再多一點的設置可能是轉義一下路徑中的斜槓,一旦原始的excel表不是很規整,這樣簡單讀入勢必報錯!
  • 超詳細教程|pandas合併之append和concat(下)
    上篇我們講了pd.append(),下篇我們繼續介紹pd.concat()二、pd.concat([df_01,df_02])描述:concat方法用以將兩個或多個pandas對象根據軸(橫向/縱向)進行拼接,concat函數是在pandas命名空間下的方法,因此需要通過
  • PANDAS: 新手教程 一 - 人工智慧遇見磐創
    Pandas是一個強大的開源數據分析和操作庫。它可以幫助你對數據進行各種操作,並生成有關它的不同報告。我將把這篇文章分成兩篇基本知識-我將在這個故事中介紹。我將介紹Pandas的基本功能,這些功能將使你大致了解如何開始使用Pandas,以及它如何幫助你節省大量時間。高級-將通過高級的功能,使它更容易解決複雜的分析問題。
  • Python數據分析常用函數及參數詳解,可以留著以備不時之需
    一文中我們介紹了Python進行數據分析全流程的幾個主要函數。但由於實際中的分析需求可能比較複雜,就要求對數據做更加複雜的處理。所以,我們有必要提前準備一些常用的函數,這些函數不用全部會,知道有這些函數,並做到在我們要實現數據處理邏輯時,知道有什麼函數可用就夠了。為了便於學習這些函數,本文按照各自類型進行了分門別類。
  • Pandas transform函數
    在本文中,我們將介紹以下最常用的Pandas transform()用途:轉換值組合groupby()過濾數據在組級別處理缺失值請查看我的Github repo以獲取原始碼;https://github.com/BindiChen/machine-learning/blob/master/data-analysis/013-pandas-transform/pandas-transform.ipynb
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • 快速介紹Python數據分析庫pandas的基礎知識和代碼示例
    我創建了這個pandas函數的備忘單。這不是一個全面的列表,但包含了我在構建機器學習模型中最常用的函數。讓我們開始吧!一個類似但不太有用的函數是df.dtypes只給出列數據類型。NaN(非數字的首字母縮寫)是一個特殊的浮點值,所有使用標準IEEE浮點表示的系統都可以識別它pandas將NaN看作是可互換的,用於指示缺失值或空值。有幾個有用的函數用於檢測、刪除和替換panda DataFrame中的空值。
  • 從小白到大師,這裡有一份Pandas入門指南
    v=hK6o_TDXXN8用一句話來總結,Pandas v1.0 主要改善了穩定性(如時間序列)並刪除了未使用的代碼庫(如 SparseDataFrame)。數據讓我們開始吧!選擇「1985 到 2016 年間每個國家的自殺率」作為玩具數據集。這個數據集足夠簡單,但也足以讓你上手 Pandas。
  • Excel常用數學函數匯總
    一、sum/count/average 這三個函數應該是最最常用的啦,sum是求和、count是計數、average是求平均值,來結合下面的例子看一下它們如何使用。
  • python項目實踐分享:使用pandas處理大型CSV文件
    在pandas中用函數isnull()和notnull()來檢測數據是否丟失。(2)DataFrame 類似於電子表格,其數據為排好序的數據列的集合,每一列都可以是 不同的數據類型,它類似於一個二維數據結構,支持行和列的索引。
  • Python數據分析常用高階函數大全
    最後返回的是,可迭代對象裡滿足函數要求的元素。# filter函數返回的是迭代器,所以需要用list轉換,進行釋放元素。運算的步驟是2+3=55+4=9最後返回的結果就是9applyDataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), kwds)apply函數是pandas.DataFrame裡的方法例如
  • 第5章 精通pandas合併操作(使用pandas進行數據分析,)
    1. comine方法2. update方法三、concat方法四、merge與join1. merge函數2. join函數第5章 合併import numpy as npimport pandas as pd
  • 127、使用pandas讀取文本文件
    pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數,其中常用read_csv和read_table讀取文件。0.png下面出現的例子中需要讀取的文件都存放在我自己的電腦 D:Pytho\notebookpydata-book-masterch06 中。
  • 數據科學家和軟體工程師都在用的pandas函數有哪些?
    能夠快速查找和使用函數讓我們在編寫代碼時可以達到一定的流暢程度。因此筆者創建了這份自己每天都在使用的、用於構建網絡應用程式和機器學習模型的函數備忘清單。它不算詳盡,但包含了筆者最常使用的函數、示例,以及該何時使用的有效見解。
  • 圖解NumPy:常用函數的內在機制
    支持大量多維數組和矩陣運算的 NumPy 軟體庫是許多機器學習開發者和研究者的必備工具,本文將通過直觀易懂的圖示解析常用的 NumPy 功能和函數,幫助你理解 NumPy 操作數組的內在機制。NumPy 是一個基礎軟體庫,很多常用的 Python 數據處理軟體庫都使用了它或受到了它的啟發,包括 pandas、PyTorch、TensorFlow、Keras 等。理解 NumPy 的工作機制能夠幫助你提升在這些軟體庫方面的技能。而且在 GPU 上使用 NumPy 時,無需修改或僅需少量修改代碼。NumPy 的核心概念是 n 維數組。
  • 常用的Excel日期函數
    Excel日期大家都會用,但是你知道Excel中有多少日期和時間函數嗎?Excel為我們提供了大約20個日期和時間函數,這些函數對於處理表格中的日期數據都是非常有用的。下面介紹幾個常用的Excel日期函數及其實際應用案例。(1)處理動態日期在處理動態日期時,可以使用TODAY函數,該函數會得到計算機系統的當前日期。