部分Numpy和Pandas的簡單介紹
1 Python資料庫清洗-Numpy
- 多用於矩陣,陣列計算
- 安裝Numpy
- pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 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中所有的元素的資料型別
- 拓展:
-
注:
-
list、dict 等可以包含不同資料型別,故沒有dtype屬性
-
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