1. 程式人生 > 其它 >部分Numpy和Pandas的簡單介紹

部分Numpy和Pandas的簡單介紹

1 Python資料庫清洗-Numpy

  • 多用於矩陣,陣列計算
  • 安裝Numpy
  • Number簡單介紹
    • Number是Python中關於科學計算的第三方庫,代表“Numeric Python” 。提供多維陣列物件、多種派生物件(如掩碼陣列、矩陣)以及用於快速運算元組的函式及API。Number其中最重要的特色是其N維的物件----ndarray。ndarray是一系列相同資料型別的集合,其元素可以從零開始的索引來訪問

2 Number運用

2.1 建立ndarray物件--陣列建立

import number as np
a = np.array([1,2,3])  #建立一維陣列物件
b = np.array([1,2,3],[4,5,6]) #建立二維陣列物件
  • ndarray與array的區別

    • 在Number中,ndarray是類的物件,用於表示N維陣列,也就是是一個統稱的物件;而array是一個生成陣列的函式,可以理解為一個方法
  • 其他建立陣列的函式

    • 函式 描述
      zeros((m,n)) 生成一個全零矩陣,規格為mXn
      ones((m,n)) 生成一個全一矩陣,規格為mXn
      eye(m) 生成一個單位矩陣,規格為mXm
      full((m,n),x) 生成一個元素全為x的矩陣,規格為mXn
      random.random((m,n)) 生成一個0~1之間的隨機數矩陣,規格為mXn
      random.randint(i,j,(m,n)) 生成一個i~j之間的隨機整數矩陣,規格為mXn

2.2 Numpy的索引--陣列索引

  • 通過陣列的索引方式找到需要的陣列資料

  • 跟Python列表相似,NumPy陣列也可以進行索引和切片。陣列可能是多維的,所以需要每個維度都需要指定

  • 格式:nd[行切片,列切片],nd:表示NumPy陣列

    • 例如:

      import numpy as np
      a = np.array([[1,2,3],[4,5,6],[7,8,9]])
      print(a[:2,1:3])   #切取1、2行,2、3列的資料
      
      [[2 3]
       [5 6]]
      
  • 用陣列切片賦值會對原始資料同樣產生影響,也就是會改變原陣列

2.3 Numpy的索引--神奇索引(整數陣列索引)

  • 神奇索引是Numpy的術語,使用整數陣列進行資料索引

  • 格式:nd[[行1,行2,行3,……],[列1,列2,列3,……]]或者np.array([nd[行1,列1],nd[行2,列2],nd[行3,列3],……]),nd表示Numpy陣列,np.array表示生成一個ndarray物件

    • 例如:

      import numpy as np
      a = np.array([[1,2,3],[4,5,6],[7,8,9]])
      print(a[[0,0,1,1],[1,2,1,2]])
      print("-"*40)
      print(np.array([a[0,1],a[0,2],a[1,1],a[1,2]]))
      
      [2 3 5 6]
      ----------------------------------------
      [2, 3, 5, 6]
      

2.4 陣列索引與神奇索引的區別

  • 陣列索引會改變原陣列格式
    • 比如:原陣列為二維,切片得到的結構為一維
  • 神奇索引不會改變原陣列格式,生成的陣列檢視始終是原始陣列的子陣列
  • 關於神奇索引的一個有用的技巧是:從矩陣的每一行中選擇或改變一個元素(我不理解)

2.5 Numpy的索引--布林值索引

  • 布林值索引允許選擇陣列的任意元素,通常用來選擇滿足某些條件的陣列元素

  • 形式有多種

    • 例如
    import numpy as np
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    b = (a > 2)
    print(b)
    print("-"*40)
    print(a[a > 2])
    
    [[False False  True]
     [ True  True  True]
     [ True  True  True]]
    ----------------------------------------
    [3 4 5 6 7 8 9]
    

2.6 判斷Numpy陣列中元素的的資料型別的方法

  • 在python中有返回資料結構的函式type()

  • 在Numpy中返回資料元素的資料型別的是dtype屬性

    • 拓展:astype()函式可以改變np.array中所有的元素的資料型別
    1. list、dict 等可以包含不同資料型別,故沒有dtype屬性

    2. np.array有dtype屬性的才能用astype()函式

2.7 Numpy陣列的陣列運算

  • 在Numpy中實質是陣列對於位置的元素進行運算。
    • 所以*是元素乘法,而不是矩陣乘法。計算矩陣乘法使用dot()函式。
      • dot()既可作為Numpy模組中的函式,也可做為陣列物件的例項方法

3 Pandas-增強版Numpy

  • Pandas是在Numpy的基礎上建立的程式庫,它提供了兩種資料結構,即Series和DataFrame。DataFrame本質是帶行標籤和列標籤,支援相同資料型別缺失值多維陣列
  • Pandas的意義:為資料處理過程中處理那些消耗大量時間的“資料清洗(Data Munging)”任務提供了便捷

3.1 使用陣列建立Series

  • Series物件是一個帶索引的一維陣列

  • 如果資料是ndarray,則需要傳遞的索引必須要有相同長度,如果沒有傳遞引數則自動建立索引

    • 例如

      import numpy as np
      import pandas as pd
      a = np.array([5,6,7,8])
      df = pd.Series(a,index=['a','b','c','d'])
      print(df)
      
      a    5
      b    6
      c    7
      d    8
      dtype: int32
      

3.2 使用字典建立Series

  • 使用字典建立Series如果沒有指定索引,則按照排列順序取得字典鍵以構成索引;如果指定索引,則與索引對應的元素將被取出

3.3 使用常數建立Series

  • 例如

    import pandas as pd
    df = pd.Series(4,index=['a','b','c','d'])
    print(df)
    
    a    4
    b    4
    c    4
    d    4
    dtype: int64
    

3.4 訪問Series物件

  • 與ndarray訪問方式類似,只是index與索引同時被操作

3.5 使用列表建立DataFrame

  • DataFrame可以看作既有靈活的行索引,又有靈活的列索引的二維陣列。也可以把DataFrame看成若干個Series物件的有序排列,這裡的“排列”指的是他們擁有共同的索引

  • 從列表中建立列表,不給索引和列名會自動建立索引和列名

    • 例如

      import pandas as pd
      data = [1,2,3]
      df = pd.DataFrame(data)
      print(df)
      
         0
      0  1
      1  2
      2  3
      
  • 同時列表建立的DataFrame可以理解為“行型建立

    • 例如

      import pandas as pd
      data = [['a',1],['b',2],['c',],['d',4]]
      df = pd.DataFrame(data,columns=["A","B"]) #columns
      print(df)
      
         A    B
      0  a  1.0
      1  b  2.0
      2  c  NaN
      3  d  4.0
      
    • NaN:是"Not a Number" 的縮寫,意思是“不是一個數字”,通常表示空值

3.6 使用字典建立DataFrame

  • 使用字典建立DataFrame可以理解為“列型建立”,同時index和columns都可以通過引數來建立

    • 指定index:如果存在相同index,則選取已有資料;如果沒有index,則新建行元素全為空

    • 指定columns:只有存在的columns才會返回對應的DataFrame

    • 例如

      import pandas as pd
      data = {'one':pd.Series(['a',1]),'two':pd.Series(['b',2],index=['a','b']),'three':pd.Series(['c',]),'four':pd.Series(['d',4])}
      df = pd.DataFrame(data)
      print(df)
      
         one  two three four
      0    a  NaN     c    d
      1    1  NaN   NaN    4
      a  NaN    b   NaN  NaN
      b  NaN    2   NaN  NaN
      

3.7 使用陣列的字典或者列表的字典建立DataFrame

  • 陣列或列表中的一個元素代表了DataFrame的一列,字典的key會轉為DataFrame的列名

  • 例如:建立一個DataFrame並更新索引

    import pandas as pd
    data = {'one':[1,2,3,4],'two':[2,3,4,5],'three':[3,4,5,6]}
    df = pd.DataFrame(data,index=['a','b','c','d'])
    print(df)
    
       one  two  three
    a    1    2      3
    b    2    3      4
    c    3    4      5
    d    4    5      6
    

3.8 使用字典的列表建立DataFrame

  • 列表的一個元素代表了DataFrame的一行,字典的Key會轉成DataFrame的列名

  • 例如:

    import pandas as pd
    data = [{'a':1,'b':2},{'a':1,'c':2}]
    df = pd.DataFrame(data)
    print(df)
    
       a    b    c
    0  1  2.0  NaN
    1  1  NaN  2.0