安裝
視頻鏈接:https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/
pip install numpy
pip install pandas
Numpy 學習
Numpy屬性
import numpy as nparray = np.array([[1,2,3],[2,3,4]])
print(array)
print('number of dim:',array.ndim)//幾維度
print('shape:',array.shape)//行數列數
print('size:',array.size)//多少個元素
Numpy創建array
impport numpy as npa = np.array([2,23,4],dtype=np.int)
print(a)
print(a.dtype)
a = np.zeros((3,4))//三行四列的0矩陣
a = np.ones((3,4),dtype=np.int16)//三行四列的1矩陣
a = np.empyt((3,4))//三行四列非常接近0的矩陣
a = np.arrange(10,20,2)//[10 12 14 16 18]
a = np.arrange(12).reshape((3,4))//三行四列從0~11
a = np.linspace(1,10,5)//從1到10分成5段的數列,[1. 3.25 5.5 7.75 10.]
Numpy 基礎運算1
import numpy as npa = np.array([10,20,30,40]
b = np.arrange(4)
print(b<3)//[True True True False]
print(b == 3)//[False False False True]c = a + b
print(c)//[10 21 32 43]c = b**2//b的平方,[0 1 4 9]
c = 10*np.sin(a)//正弦d = np.array([[1,1],[0,1] ])
e = np.arrange(4).reshape((2,2))
f = d*e
f_dot = np.dot(e,f)
f_dot_2 = e.dot(f)//運算和f_dot完全相同
print(f)//[[0 1][0 3]]
print(f_dot)//[[2 4][2 3]],只是矩陣的運算a = np.random.random((2,4))//2行4列0~1范圍的隨機值
np.sum(a)//求和
np.min(a)//求最小
np.max(a)//求最大np.sum(a,axis=1)//在行中求和,1代表行,0代表列
Numpy 基礎運算2
import numpy as npA = np.arrange(2,14).reshape((3,4))
np.argmin(A)//最小值的索引
np.argmax(A)//最大值的索引
print(np.argmin(A))//0
np.mean(A)//平均值
A.mean()//平均值
np.median(A)//中位數 7.5
np.cumsum(A)//逐步加進去 [2 5 9 14 20 27 35 44 54 65 77 90]
np.diff(A)//每兩個數之間的差 [[1 1 1][1 1 1][1 1 1]]
np.nonzero(A)//找出非零元素的位置
np.sort(A)//逐行排序
np.transpose(A)//A的轉置
A.T//A的轉置
(A.T).dot(A)//A的轉置與A相乘
np.clip(A,5,9)//小于5的數賦值為5,大于9的數賦值為9,中間值不變
np.mean(A,axis=0)//對列取平均值 [10. 9. 8. 7.]
print(A)
Numpy 索引
import numpy as npA = np.arrange(3,15)
A[3]//6
A = A.reshape((3,4))
A[2]//[11 12 13 14]
A[1][1]//8
A[1,1]//8
A[2,:]//第2行的所有數
A[1,1:3]//[8 9]for row in A:print(row)//依次打印每一行for column in A.T:print(column)//依次打印每一列A.flatten()//又轉成了一維 [3 4 5 6 7 8 9 10 11 12 13 14]for item in A.flat:print(item)//3-14依次每行打印出來,A.flat返回了一個迭代器
Numpy array 合并
import numpy as npA = np.array([1,1,1])
B = np.array([2,2,2])C = np.vstack((A,B))#[[1 1 1][2 2 2]] vertical stack上寫合并
D = np.hstack((A,B))#[1 1 1 2 2 2] horizontal stack左右合并
print(A.shape,C.shape,D.shape)#(3,)(2,3)(6,)#把橫向的數列轉成縱向的 np.newaxis增加一個維度 還有reshape(3,1)
A[np.newaxis,:].shape #(1,3)
A[:,np.newaxis].shape #(3,1) [[1][1][1]]E = np.concatenate((A,B,B,A),axis=0)#指定方向合并(左右或者上下)
Numpy array 分割
import numpy as npA = np.arange(12).reshape((3,4))
np.split(A,2,axis = 1)#橫向等分成兩段 [array([[0,1][4,5],[8,9]]),array([[2,3][6,7],[10,11]])] 橫向等分成兩段np.array_split(A,3,axis = 1)#橫向不等分成兩段 [array([[0,1],[4,5],[8,9]]),array([[2],[6],[10]]),array([[3],[7],[11]])]np.vsplit(A,3)#縱向分為三段
np.hsplit(A,2)#橫向分為兩段
Numpy copy & deep copy
import numpy as npa = np.arange(4)
b = a
c = a
d = b
a[0] = 1
b is a#True b就是a b[0] = 11 a,b,c,d就是一個變量 引用b = a.copy() # deep copy
b is a # False a和b是兩個變量,沒有關聯
Pandas 學習
Pandas 選擇數據
import pandas as pd
import numpy as npdates = pd.date_range('20130101',periods = 6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,cloumns=['A','B','C','D'])print(df)# A B C D# 2013-01-01 0 1 2 3# 2013-01-02 4 5 6 7# 2013-01-03 8 9 10 11# 2013-01-04 12 13 14 15# 2013-01-05 16 17 18 19# 2013-01-06 20 21 22 23print(df.A)#或者 print(df['A'])# 2013-01-01 0 # 2013-01-02 4 # 2013-01-03 8 # 2013-01-04 12 # 2013-01-05 16 # 2013-01-06 20df[0:3],df['20130101':'201304']是同樣的操作# select by label:loc 指定標簽
print(df.loc['20130102'])#A 4#B 5#C 6#D 7print(df.loc[:,['A','B']])#所有行的A列和B列顯示出來
print(df.loc[‘20130102’,['A','B']])#行索引為‘20130102’的A列和B列顯示出來#A 4#B 5#select by position:iloc 指定位
print(df.iloc[3])#打印第四行數據
print(df.iloc[3,1])#打印第四行第二列數據print(df.iloc[1,3,5])#第2,4,6行打印#mixed selection:ix 混合位和標簽
print(df.ix[:3,['A','C']])#0-2行 A/C列#Boolean indexing 通過真值打印
print(df[df.A > 8])# 打印A列中大于8的行的所有信息
Pandas 設置值
import pandas as pd
import numpy as npdates = pd.date_range('20130101',periods = 6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,cloumns=['A','B','C','D'])df.iloc[2,2] = 111#修改第3行第3列數值
df.iloc['20130101','B'] = 222
df[df.A > 4] = 0# A列大于4的行的所有信息賦值為0
df.A[df.A > 4] = 0# A列大于4的行的A列賦值為0
df['F'] = np.nan #F列值全為NaN(沒有此列就追加此列)
df['E'] = pd.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6))#追加E列,列的值為1,2,3,4,5,6
Pandas處理丟失數據
import pandas as pd
import numpy as npdates = pd.date_range('20130101',periods = 6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,cloumns=['A','B','C','D'])df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan#設置第1行2列值為NaNprint(df.dropna(axis=0,how='any'))#丟掉有NaN值的行
#how={'any','all'} any表示只要有就滿足 all表示所有都是才滿足print(df.fillna(value=0))#填充NaN值為0
df.isnull()#df中是否有NaN,列出所有
np.any(df.isnull()) == True#只要有NaN就返回True
Pandas 導入導出
Pandas 合并 concat
Pandas 合并 merge
Pandas plot 畫圖