目錄html
numpy屬於第三方庫,須要下載安裝。python
numpy庫有兩個做用:sql
import numpy as np #np是約定俗稱將numpy簡寫 np.array() # 建立矩陣
一維矩陣就至關於列表數據庫
arr =np.array([1,2,3]) print(arr) [1 2 3]
arr = np.array([[1,2,3],[1,2,3]]) print(arr) [[1 2 3] [1 2 3]]
arr = np.array([[[1,2,3],[1,2,3]],[[1,2,3],[1,2,3]]]) print(arr) [[[1 2 3] [1 2 3]] [[1 2 3] [1 2 3]]]
arr = np.array([[12,23,4],[12,3,4]]) print(arr) [[12 23 4] [12 3 4]] print(arr.shape) #獲取矩陣的行和列 (2, 3) print(arr.shape[0]) # 獲取矩陣的行 2 print(arr.shape[1]) # 獲取矩陣的列 3
切分矩陣相似於列表的切割,可是與列表的切割不一樣的是,矩陣的切割涉及到行和列的切割,可是二者切割的方式都是從索引0開始,而且取頭不取尾。json
arr = np.array([[12,23,4],[10,3,4],[2,4,5]]) print(arr) print(arr[:,:]) #取全部的元素,:默認全部 print(arr[0,:]) #取第一整行 print(arr[:,0]) # 取第一列 print(arr[1,2]) # 取第二行第三列的值 print(arr[arr>10]) # 取大於10的元素 [[12 23 4] [10 3 4] [ 2 4 5]] ************************************************** [[12 23 4] [10 3 4] [ 2 4 5]] #取全部的元素,:默認全部 ************************************************** [12 23 4] #取第一整行 ************************************************** [12 10 2] # 取第一列 ************************************************** 4 # 取第二行第三列的值 ************************************************** [12 23] # 取大於10的元素
矩陣也是一個可變類型的數據,若是對矩陣進行替換操做,會修改矩陣的元素。數組
arr = np.array([[12,23,4],[10,3,4],[2,4,5]]) print(arr) arr[1,:]=0 # 取值第二行,並讓第二行的元素都爲0 print(arr) arr[arr>10] =0 # 取大於10的值,並讓其爲0 print(arr) [[12 23 4] [10 3 4] [ 2 4 5]] ************************************************** [[12 23 4] [ 0 0 0] # 取值第二行,並讓第二行的元素都爲0 [ 2 4 5]] ************************************************** [[ 0 0 4] # 取大於10的值,並讓其爲0 [10 3 4] [ 2 4 5]]
arr1 = np.array([[12,23,4],[10,3,4],[2,4,5]]) arr2 = np.array([[11,33,6],[11,7,6],[2,4,5]]) print(arr1) print('*'*50) print(arr2) print('*'*50) print(np.hstack((arr1,arr2))) # 合併兩個矩陣的行,矩陣應該有相同的行 h表示水平 print(np.vstack((arr1,arr2))) #合併兩個矩陣的列,矩陣應該有相同的列,v表示垂直 print(np.concatenate((arr1,arr2),axis=0)) #axis=0 表示合併兩個矩陣的列,矩陣應該有相同的列,而且axis默認爲0 print(np.concatenate((arr1,arr2),axis=1)) #axis=1 表示合併兩個矩陣的行,矩陣應該有相同的行,axis默認爲0 [[12 23 4] [10 3 4] [ 2 4 5]] ************************************************** [[11 33 6] [11 7 6] [ 2 4 5]] ************************************************** [[12 23 4 11 33 6] [10 3 4 11 7 6] [ 2 4 5 2 4 5]] # 合併兩個矩陣的行,矩陣應該有相同的行 h表示水平 ************************************************** [[12 23 4] [10 3 4] [ 2 4 5] [11 33 6] [11 7 6] [ 2 4 5]] ************************************************** [[12 23 4] [10 3 4] [ 2 4 5] [11 33 6] [11 7 6] [ 2 4 5]] #axis=0 表示合併兩個矩陣的列,矩陣應該有相同的列,而且axis默認爲0 ************************************************** [[12 23 4 11 33 6] [10 3 4 11 7 6] [ 2 4 5 2 4 5]] #axis=1 表示合併兩個矩陣的行,矩陣應該有相同的行,axis默認爲0
arangedom
arr =np.arange(1,10) #建立1-9 的數字 一維矩陣 print(arr) [1 2 3 4 5 6 7 8 9]
linspace/loqspace函數
print(np.linspace(0,20,6)) # 等差數列 取頭也取尾,取6個數,而且前兩個數之和等於後一個數 [ 0. 4. 8. 12. 16. 20.] print(np.logspace(0,20,6)) # 等比數列 取6個數 [1.e+00 1.e+04 1.e+08 1.e+12 1.e+16 1.e+20]
zeros/ones/eye/emptyspa
print(np.zeros((3,4))) # 建立 3*4全是0的矩陣 [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] print(np.ones((3,4))) # 建立3*4 全是1的矩陣 [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] print(np.eye(3)) # 建立3個主元的單位矩陣 [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] print(np.empty((4,4))) # 建立一個4*4的隨機矩陣,裏面的元素是隨機生成的 [[6.23042070e-307 1.42417221e-306 1.37961641e-306 1.24610383e-306] [1.69118108e-306 8.06632139e-308 1.20160711e-306 1.69119330e-306] [1.78019082e-306 1.78020984e-306 6.23053954e-307 8.06635110e-308] [7.56603881e-307 1.78019082e-306 1.78020984e-306 1.60218627e-306]]
+ 兩個矩陣對應元素相加 - 兩個矩陣對應元素相減 * 兩個矩陣對應元素相乘 / 兩個矩陣對應元素相除,若是都是整數則取商 % 兩個矩陣對應元素相除後取餘數 **n 單個矩陣每一個元素都取n次方,如**2:每一個元素都取平方
pandas 是python數據分析的核心模塊,它有五大功能:excel
import numpy as np import pandas as pd arr = np.arange(1,10) print(arr) s= pd.Series(arr) print(s) [1 2 3 4 5 6 7 8 9] 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 dtype: int32
import pandas as pd import numpy as np # 定義索引(行)的值 dates = pd.date_range('2019-01-01',periods=6) # 定義矩陣內的值 np.random.seed(1) arr = 10*np.random.randn(6,4) # 進行數據表的合併,column--隊列 ,表示列 df = pd.DataFrame(arr,index=dates,columns=['c1','c2','c3','c4']) print(df) c1 c2 c3 c4 2019-01-01 16.243454 -6.117564 -5.281718 -10.729686 2019-01-02 8.654076 -23.015387 17.448118 -7.612069 2019-01-03 3.190391 -2.493704 14.621079 -20.601407 2019-01-04 -3.224172 -3.840544 11.337694 -10.998913 2019-01-05 -1.724282 -8.778584 0.422137 5.828152 2019-01-06 -11.006192 11.447237 9.015907 5.024943
使用pandas讀取字典形式的數據(數組的長度必須相同)
df2 = pd.DataFrame({'a':1,'b':[2,3],'c':np.arange(2),'d':'hello'}) print(df2) a b c d 0 1 2 0 hello 1 1 3 1 hello
dtype 查看數據類型 index 查看行序列或者索引 columns 查看各列的標籤 values 查看數據框內的數據,也即不含表頭索引的數據 describe 查看數據每一列的極值,均值,中位數,只可用於數值型數據 transpose 轉置,也可用T來操做 sort_index 排序,可按行或列index排序輸出 sort_values 按數據值來排序
df = pd.DataFrame(arr,index=dates,columns=['c1','c2','c3','c4']) print(df.dtypes) print(df.index) print(df.columns) print(df.values) # 查看類型 c1 float64 c2 float64 c3 float64 c4 float64 dtype: object # 查看索引項 DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05', '2019-01-06'], dtype='datetime64[ns]', freq='D') #查看列 Index(['c1', 'c2', 'c3', 'c4'], dtype='object') # 查看值 [[ 16.24345364 -6.11756414 -5.28171752 -10.72968622] [ 8.65407629 -23.01538697 17.44811764 -7.61206901] [ 3.19039096 -2.49370375 14.62107937 -20.60140709] [ -3.22417204 -3.84054355 11.33769442 -10.99891267] [ -1.72428208 -8.77858418 0.42213747 5.82815214] [-11.00619177 11.4472371 9.01590721 5.02494339]] 查看 每一列的極值,均值,中位數 print(df.describe()) c1 c2 c3 c4 count 6.000000 6.000000 6.000000 6.000000 mean 2.022213 -5.466424 7.927203 -6.514830 std 9.580084 11.107772 8.707171 10.227641 min -11.006192 -23.015387 -5.281718 -20.601407 25% -2.849200 -8.113329 2.570580 -10.931606 50% 0.733054 -4.979054 10.176801 -9.170878 75% 7.288155 -2.830414 13.800233 1.865690 max 16.243454 11.447237 17.448118 5.828152
print(df['c2']) # 按列取值 2019-01-01 -6.117564 2019-01-02 -23.015387 2019-01-03 -2.493704 2019-01-04 -3.840544 2019-01-05 -8.778584 2019-01-06 11.447237 Freq: D, Name: c2, dtype: float64
print(df[0:2]) #取第一行和第二行 c1 c2 c3 c4 2019-01-01 16.243454 -6.117564 -5.281718 -10.729686 2019-01-02 8.654076 -23.015387 17.448118 -7.612069
loc/iloc 自定義取值
print(df.loc['2019-01-01':'2019-01-03']) # 經過自定義的行標籤選擇數據 c1 c2 c3 c4 2019-01-01 16.243454 -6.117564 -5.281718 -10.729686 2019-01-02 8.654076 -23.015387 17.448118 -7.612069 2019-01-03 3.190391 -2.493704 14.621079 -20.601407
print(df.iloc[2,1]) # 經過索引取值 == df.values[2,1] -2.493703754774101
print(df.iloc[1:4,1:4]) # 行:取第二行到第四行 ; 列:取第二列到第四列 c2 c3 c4 2019-01-02 -23.015387 17.448118 -7.612069 2019-01-03 -2.493704 14.621079 -20.601407 2019-01-04 -3.840544 11.337694 -10.998913
使用邏輯判斷取值
print(df[df['c1']>0]) # df['c1']>0 取c1列裏面大於0的值 c1 c2 c3 c4 2019-01-01 16.243454 -6.117564 -5.281718 -10.729686 2019-01-02 8.654076 -23.015387 17.448118 -7.612069 2019-01-03 3.190391 -2.493704 14.621079 -20.601407
from io import StringIO import pandas as pd test_data = ''' 5.1,,1.4,0.2 4.9,3.0,1.4,0.2 4.7,3.2,,0.2 7.0,3.2,4.7,1.4 6.4,3.2,4.5,1.5 6.9,3.1,4.9, ,,, ''' test_data = StringIO(test_data) # 將數據寫入內存 df = pd.read_csv(test_data) df.columns =['c1','c2','c3','c4'] print(df) c1 c2 c3 c4 0 4.9 3.0 1.4 0.2 1 4.7 3.2 NaN 0.2 2 7.0 3.2 4.7 1.4 3 6.4 3.2 4.5 1.5 4 6.9 3.1 4.9 NaN 5 NaN NaN NaN NaN
print(df.isnull()) print(df.isnull().sum()) # 經過isnull()方法後使用sum()方法便可得到該數據集某個特徵含有多少個缺失值。 c1 c2 c3 c4 0 False False False False 1 False False True False 2 False False False False 3 False False False False 4 False False False True 5 True True True True c1 1 c2 1 c3 2 c4 2 dtype: int64
print(df.dropna(axis=0)) #axis=0會刪除有Nan值的行 c1 c2 c3 c4 0 4.9 3.0 1.4 0.2 2 7.0 3.2 4.7 1.4 3 6.4 3.2 4.5 1.5
print(df.dropna(axis=1)) #axis=1會刪除有Nan值的列 Empty DataFrame Columns: [] Index: [0, 1, 2, 3, 4, 5]
print(df.dropna(how='all')) #刪除全爲NaN值得行或列 c1 c2 c3 c4 0 4.9 3.0 1.4 0.2 1 4.7 3.2 NaN 0.2 2 7.0 3.2 4.7 1.4 3 6.4 3.2 4.5 1.5 4 6.9 3.1 4.9 NaN