超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

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

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

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

1. 導入模塊

<code>import pandas as pd                    # 這裡用到的是pandas和numpy兩個模塊
import numpy as np/<code>

2. 創建數據集並讀取

2.1 創建數據集

我構造了一個超市購物的數據集,該數據集屬性包括:訂單ID號(id)、訂單日期(date)、消費金額(money)、訂單商品(product)、商品類別(department)、商品產地(origin)。

<code># 列表和字典均可傳入DataFrame,我這裡用的是字典傳入: 

data=pd.DataFrame({
\t\t"id":np.arange(101,111), # np.arange會自動輸出範圍內的數據,這裡會輸出101~110的id號。
\t\t"date":pd.date_range(start="20200310",periods=10), # 輸出日期數據,設置週期為10,注意這裡的週期數應該與數據條數相等。
\t\t"money":[5,4,65,-10,15,20,35,16,6,20], # 設置一個-10的坑,下面會填
\t\t"product":['蘇打水','可樂','牛肉乾','老乾媽','菠蘿','冰激凌','洗面奶','洋蔥','牙膏','薯片'],
\t\t"department":['飲料','飲料','零食','調味品','水果',np.nan,'日用品','蔬菜','日用品','零食'], # 設置一個空值的坑
\t\t"origin":['China',' China','America','China','Thailand','China','america','China','China','Japan'] # 設置一個america的坑
})
data # 輸出查看數據集/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

2.2 數據寫入和讀取

<code>data.to_csv("shopping.csv",index=False)        # index=False表示不加索引,否則會多一行索引/<code>
<code>data=pd.read_csv("shopping.csv")/<code>

3. 數據查看

3.1 數據集基礎信息查詢

<code>data.shape                               # 行數列數
data.dtypes # 所有列的數據類型
data['id'].dtype # 某一列的數據類型
data.ndim # 數據維度
data.index # 行索引
data.columns # 列索引
data.values # 對象值/<code>

3.2 數據集整體情況查詢

<code>data.head()                             # 顯示頭部幾行(默認5行)
data.tail() # 顯示末尾幾行(默認5行)
data.info() # 數據集相關信息概覽:索引情況、列數據類型、非空值、內存使用情況
data.describe() # 快速綜合統計結果/<code>

4. 數據清洗

4.1 查看異常值

當然,現在這個數據集很小,可以直觀地發現異常值,但是在數據集很大的時候,我用下面這種方式查看數據集中是否存在異常值,如果有其他更好的方法,歡迎傳授給我。

<code>for i in data:
\t print(i+": "+str(data[i].unique())) # 查看某一列的唯一值/<code>

輸出結果:我們發現,該數據集中money存在一個負值,department存在一個空值以及origin存在大小寫問題。

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

4.2 空值處理

4.2.1 空值檢測

<code>data.isnull() # 查看整個數據集的空值
data['department'].isnull() # 查看某一列的空值/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

將空值判斷進行彙總,更加直觀,ascending默認為True,升序。

<code>data.isnull().sum().sort_values(ascending=False)/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

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

4.2.2 空值處理

pandas.DataFrame.fillna(value = None,method = None,inplace = False)

  • value:用於填充的值,可以是具體值、字典和數組,不能是列表;
  • method:填充方法,有 ffill 和 bfill 等;
  • inplace默認無False,如果為True,則將修改此對象上的所有其他視圖。


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

<code>data['department'].fillna(method="ffill")                           # 填充上一個值,即填充"水果"/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

<code>data['department'].fillna(method="bfill")                      # 填充下一個值,即填充"日用品"/<code>
<code>data['department'].fillna(value="冷凍食品",inplace=True)     # 替換為具體值,並且在原對象值上進行修改/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

4.3 空格處理

==只針對object類型數據==

<code>for i in data:                                                   # 遍歷數據集中的每一列
if pd.api.types.is_object_dtype(data[i]): # 如果是object類型的數據,則執行下方代碼
data[i]=data[i].str.strip() # 去除空格
data['origin'].unique() # 驗證一下/<code>

輸出結果:array(['China', 'America', 'Thailand', 'america', 'Japan'], dtype=object)

4.4 大小寫轉換

<code>data['origin'].str.title()              # 將首字母大寫
data['origin'].str.capitalize() # 將首字母大寫
data['origin'].str.upper() # 全部大寫
data['origin'].str.lower() # 全部小寫/<code>

4.5 數據替換

<code>data['origin'].replace("america","America",inplace=True) # 將第一個值替換為第二個值,inplace默認為False
data['origin']/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

<code>data['money'].replace(-10,np.nan,inplace=True)                                   # 將負值替換為空值
data['money'].replace(np.nan,data['money'].mean(),inplace=True) # 將空值替換為均值
data['money']/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

4.6 數據刪除

==方法1==

<code>data1 = data[data.origin != 'American']      #去掉origin為American的行
data1

data2=data[(data != 'Japan').all(1)] #去掉所有包含Japan的行 不等於Japan的行為真,則返回
data2/<code>

==方法2==

<code>data['origin'].drop_duplicates()                     # 默認刪除後面出現的重複值,即保留第一次出現的重複值/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

<code>data['origin'].drop_duplicates(keep='last')       # 刪除前面出現的重複值,即保留最後一次出現的重複值/<code> 

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

4.7 數據格式轉換

<code>data['id'].astype('str')        # 將id列的類型轉換為字符串類型。/<code>

==常見的數據類型對照==

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

4.8 更改列名稱

<code>data.rename(columns={'id':'ID', 'origin':'產地'})     # 將id列改為ID,將origin改為產地。/<code>

輸出結果:

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

思維導圖

超全的pandas數據分析常用函數總結:上篇(附贈思維導圖)

[思維導圖--上篇]

筆記中如果有錯誤的地方,歡迎各位小夥伴指正,感謝!

如果需要完整思維導圖電子版(PDF、Xmind等)可以留言或者私信!

> 1. [pandas官網](http://pandas.pydata.org/)

> 2. [pandas用法總結](https://blog.csdn.net/yiyele/article/details/80605909)

> 3. [Pandas 文本數據方法 capitalize( ) lower( ) upper( )](https://blog.csdn.net/claroja/article/details/64943601)

> 4. [python【all()全1為1, any()全0為0】](https://www.jianshu.com/p/a184bddc6fe6)

> 5. [pandas 數據類型轉換](https://www.cnblogs.com/onemorepoint/p/9404753.html)


分享到:


相關文章: