numpy模塊html
pandas模塊python
NumPy是高性能科學計算和數據分析的基礎包。它是pandas等其餘各類工具的基礎。 NumPy的主要功能: ndarray,一個多維數組結構,高效且節省空間 無需循環對整組數據進行快速運算的數學函數 *讀寫磁盤數據的工具以及用於操做內存映射文件的工具 *線性代數、隨機數生成和傅里葉變換功能 *用於集成C、C++等代碼的工具
pip install numpy import numpy
# import numpy as np
array() 將列表轉換爲數組,可選擇顯式指定dtype
arange() range的numpy版,支持浮點數
linspace() 相似arange(),第三個參數爲數組長度
zeros() 根據指定形狀和dtype建立全0數組
ones() 根據指定形狀和dtype建立全1數組
empty() 根據指定形狀和dtype建立空數組(隨機值)
eye() 根據指定邊長和dtype建立單位矩陣
以上全部方法都可使用reshape進行重構
import numpy as np #引入numpy庫 #建立一維的narray對象 a = np.array([1,2,3,4,5]) # <class 'numpy.ndarray'> [1 2 3 4 5] #建立二維的narray對象 a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]]) # <class 'numpy.ndarray'> [[ 1 2 3 4 5] [ 6 7 8 9 10]] #建立多維對象以其類推
import numpy as np a = np.arange(10) # 默認從0開始到10(不包括10),步長爲1 print(a) # 返回 [0 1 2 3 4 5 6 7 8 9] a1 = np.arange(5,10) # 從5開始到10(不包括10),步長爲1 print(a1) # 返回 [5 6 7 8 9] a2 = np.arange(5,20,2) # 從5開始到20(不包括20),步長爲2 print(a2) # 返回 [ 5 7 9 11 13 15 17 19]
import numpy as np a = np.linspace(0,10,7) # 生成首位是0,末位是10,含7個數的等差數列 print(a) # 結果 # [ 0. 1.66666667 3.33333333 5. 6.66666667 8.33333333 10. ]
import numpy as np # 下面的例子用於生成首位是10的0次方,末位是10的2次方,含5個數的等比數列。 a = np.logspace(0,2,5) # 參數2是指10的2次方 print(a) # 結果 # [ 1. 3.16227766 10. 31.6227766 100. ]
# ones建立全1矩陣 # zeros建立全0矩陣 # eye建立單位矩陣 # empty建立空矩陣(實際有值) import numpy as np a_ones = np.ones((3,4)) # 建立3*4的全1矩陣 print(a_ones) # 結果 # [[ 1. 1. 1. 1.] # [ 1. 1. 1. 1.] # [ 1. 1. 1. 1.]] a_zeros = np.zeros((3,4)) # 建立3*4的全0矩陣 print(a_zeros) # 結果 # [[ 0. 0. 0. 0.] # [ 0. 0. 0. 0.] # [ 0. 0. 0. 0.]] a_eye = np.eye(3) # 建立3階單位矩陣 print(a_eye) # 結果 # [ 1. 0. 0.] # [ 0. 1. 0.] # [ 0. 0. 1.]] a_empty = np.empty((3,4)) # 建立3*4的空矩陣 print(a_empty) # 結果 # [[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]]
# fromstring()方法能夠將字符串轉化成ndarray對象,須要將字符串數字化時這個方法比較有用,能夠得到字符串的ascii碼序列。 import numpy as np a = "abcdef" b = np.fromstring(a,dtype=np.int8) # 由於一個字符爲8位,因此指定dtype爲np.int8 print(b) # 返回 [ 97 98 99 100 101 102]
# fromfunction()方法能夠根據矩陣的行號列號生成矩陣的元素。 # 例如建立一個矩陣,矩陣中的每一個元素都爲行號和列號的和。 import numpy as np def func(i,j): return i+j a = np.fromfunction(func,(5,6)) # 第一個參數爲指定函數,第二個參數爲列表list或元組tuple,說明矩陣的大小 print(a) # 返回 # [[ 0. 1. 2. 3. 4. 5.] # [ 1. 2. 3. 4. 5. 6.] # [ 2. 3. 4. 5. 6. 7.] # [ 3. 4. 5. 6. 7. 8.] # [ 4. 5. 6. 7. 8. 9.]] #注意這裏行號的列號都是從0開始的
import numpy as np print(np.nan) # nan
import numpy as np print(np.random.rand()) # 給定形狀產生隨機數組(0到1之間的數) 0.5428533738729602 # float print(np.random.randint(1,100)) # 給定形狀產生隨機整數 40 # int print(np.random.choice(list(range(10)),5)) # 在樣本中選擇n個數據 [8 6 5 0 8] # ndarray x = np.arange(1,6) # 用list也是能夠的[1,2,3,4,5] print(np.random.shuffle(x)) # None print(x) # [4, 1, 2, 3, 5] print(np.random.uniform(0,100,5)) # None # [34.40384563 96.14040662 32.90570129 58.28899661 60.20901579]
import numpy as np #引入numpy庫 #建立一維的narray對象 a = np.array([1,2,3,4,5]) print(a.shape) # (5,) #建立二維的narray對象 a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]]) print(a2.shape) # (2, 5) print(a2.shape[0]) # 得到行數,2 print(a2.shape[1]) # 得到列數,5
import numpy as np a = np.arange(0,12).reshape(3,4) print(a) ''' [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] '''
import numpy as np a = np.arange(1.1111111,20,2) b = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]) print(a.dtype) # float64 print(b.dtype) # int32
import numpy as np a = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(a[2]) # 獲取index爲2的列 [7 8 9] print(a[2][2]) # 9 print(a[2,2]) # 9
import numpy as np a = np.arange(0,20,2) print(a) # [ 0 2 4 6 8 10 12 14 16 18] # 問題1:對於一個數組,選出其第1,3,4,6,7個元素,組成新的二維數組。 print(a[[1,3,4,6,7]]) # [ 2 6 8 12 14] a = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]) # 問題2:對一個二維數組,選出其第一列和第三列,組成新的二維數組。 print(a[:,[1,3]]) # [[ 2 4] # [ 7 9] # [12 14]]
import numpy as np a = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]) print(a[0:2]) #截取第1-2行,返回 [[1 2 3 4 5] [ 6 7 8 9 10]] print(a[1,2:5]) #截取第2行,第3、4、五列,返回 [8 9 10] print(a[2,:]) #截取第3行,返回 [11 12 13 14 15]
import numpy as np a = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]) # 其實布爾語句首先生成一個布爾矩陣,將布爾矩陣傳入[](方括號)實現截取 print(a>3) # [[False False False True True] # [ True True True True True] # [ True True True True True]] # 問題1:給一個數組,選出數組中全部大於5的偶數 print(a[(a>5) & (a%2==0)]) # [ 6 8 10 12 14] # 問題2:給一個數組,選出數組中全部大於5的數和偶數 print(a[(a>5) | (a%2==0)]) # [ 2 4 6 7 8 9 10 11 12 13 14 15] # 問題3:給一個數組,選出數組中全部大於6的數 print(a[a>6]) # [ 7 8 9 10 11 12 13 14 15] # 問題4:給一個數組,把大於6的數置零 a[a>6] = 0 print(a) #大於6清零後矩陣爲 # [[1 2 3 4 5] # [6 0 0 0 0] # [0 0 0 0 0]]
與列表不一樣,數組切片時並不會自動複製,在切片數組上的修改會影響原數組。 【解決方法:copy()】正則表達式
""" 某位置累積和指的是該位置以前(包括該位置)全部元素的和。 例如序列[1,2,3,4,5],其累計和爲[1,3,6,10,15],即第一個元素爲1,第二個元素爲1+2=3,……,第五個元素爲1+2+3+4+5=15。 矩陣求累積和的函數是cumsum(),能夠對行,列,或整個矩陣求累積和。 """ import numpy as np a = np.array([1,2,3,4,5]) print(a) # [1 2 3 4 5] a_ = a[:3] print(a_) # [1 2 3] a_[:] = 0 print(a) # [0 0 0 4 5] # 切片數據的修改會影響本來的array print(a_) # [0 0 0] b = np.array([6,7,8,9,10]) print(b) # [ 6 7 8 9 10] b_ = b[:3].copy() print(b_) # [6 7 8] b_[:] = 0 print(b) # [ 6 7 8 9 10] # 使用copy後,對原array無影響 print(b_) # [0 0 0] copy
import numpy as np a1 = np.array([[1,2],[3,4]]) a2 = np.array([[5,6],[7,8]]) #!注意 參數傳入時要以列表list或元組tuple的形式傳入 print(np.hstack([a1,a2])) # 等價於tmp = np.concatenate( (a1,a2), axis=1 ) #橫向合併,返回結果以下 # [[1 2 5 6] # [3 4 7 8]] print(np.vstack((a1,a2))) # 等價於np.concatenate( (a1,a2), axis=0 ) #縱向合併,返回結果以下 # [[1 2] # [3 4] # [5 6] # [7 8]]
一元函數:abs, sqrt, exp, log, ceil, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan
二元函數:add, substract, multiply, divide, power, mod, maximum, mininum,
sum 求和
mean 求平均數
std 求標準差
var 求方差
min 求最小值
max 求最大值
argmin 求最小值索引
argmax 求最大值索引
""" 運算符 說明 + 矩陣對應元素相加 - 矩陣對應元素相減 * 矩陣對應元素相乘 / 矩陣對應元素相除,若是都是整數則取商 % 矩陣對應元素相除後取餘數 ** 矩陣每一個元素都取n次方,如**2:每一個元素都取平方 """ import numpy as np a1 = np.array([[4,5,6],[1,2,3]]) a2 = np.array([[6,5,4],[3,2,1]]) print(a1+a2) # 相加 # [[10 10 10] # [ 4 4 4]] print(a1/a2) # 整數相除取商 # [[0.66666667 1. 1.5 ] # [0.33333333 1. 3. ]] print(a1%a2) # 相除取餘數 # [[4 0 2] # [1 0 0]] print(a1 % 2) # [[0 1 0] # [1 0 1]] print(a1 ** 2) # [[16 25 36] # [ 1 4 9]] print(a1 ** a2) # [[4096 3125 1296] # [ 1 4 3]]
""" np.sin(a) 對矩陣a中每一個元素取正弦,sin(x) np.cos(a) 對矩陣a中每一個元素取餘弦,cos(x) np.tan(a) 對矩陣a中每一個元素取正切,tan(x) np.arcsin(a) 對矩陣a中每一個元素取反正弦,arcsin(x) np.arccos(a) 對矩陣a中每一個元素取反餘弦,arccos(x) np.arctan(a) 對矩陣a中每一個元素取反正切,arctan(x) np.exp(a) 對矩陣a中每一個元素取指數函數,ex np.sqrt(a) 對矩陣a中每一個元素開根號√x """ import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(np.sin(a)) # 結果 # [[ 0.84147098 0.90929743 0.14112001] # [-0.7568025 -0.95892427 -0.2794155 ]] print(np.arcsin(a)) # 結果 # C:\Users\Administrator\Desktop\learn.py:6: RuntimeWarning: invalid value encountered in arcsin # print(np.arcsin(a)) # [[ 1.57079633 nan nan] # [ nan nan nan]]
# 矩陣乘法必須知足矩陣乘法的條件,即第一個矩陣的列數等於第二個矩陣的行數。 import numpy as np a1 = np.array([[1,2,3],[4,5,6]]) # a1爲2*3矩陣 a2 = np.array([[1,2],[3,4],[5,6]]) # a2爲3*2矩陣 print(a1.shape[1]==a2.shape[0]) # True, 知足矩陣乘法條件 print(a1.dot(a2)) # a1.dot(a2)至關於matlab中的a1*a2 # 而python中的a1*a2至關於matlab中的a1.*a2 # [[22 28] # [49 64]] print(a2.dot(a1)) # 注意,與a1.dot(a2)是不同的 # [[ 9 12 15] # [19 26 33] # [29 40 51]]
""" 求矩陣的逆須要先導入numpy.linalg,用linalg的inv函數來求逆。 矩陣求逆的條件是矩陣的行數和列數相同。 """ import numpy as np import numpy.linalg as lg a = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(lg.inv(a)) # 結果 # [[ -4.50359963e+15 9.00719925e+15 -4.50359963e+15] # [ 9.00719925e+15 -1.80143985e+16 9.00719925e+15] # [ -4.50359963e+15 9.00719925e+15 -4.50359963e+15]] a = np.eye(3) # 3階單位矩陣 print(lg.inv(a)) # 單位矩陣的逆爲他自己 # 結果 # [[ 1. 0. 0.] # [ 0. 1. 0.] # [ 0. 0. 1.]]
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a.max()) #獲取整個矩陣的最大值 結果: 6 print(a.min()) #結果:1 # 能夠指定關鍵字參數axis來得到行最大(小)值或列最大(小)值 # axis=0 行方向最大(小)值,即得到每列的最大(小)值 # axis=1 列方向最大(小)值,即得到每行的最大(小)值 # 例如 print(a.max(axis=0)) # 結果爲 [4 5 6] print(a.max(axis=1)) # 結果爲 [3 6] # 要想得到最大最小值元素所在的位置,能夠經過argmax函數來得到 print(a.argmax(axis=1)) # 結果爲 [2 2]
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a.mean()) #結果爲: 3.5 # 一樣地,能夠經過關鍵字axis參數指定沿哪一個方向獲取平均值 print(a.mean(axis=0)) # 結果 [ 2.5 3.5 4.5] print(a.mean(axis=1)) # 結果 [ 2. 5.]
""" 方差的函數爲var(),方差函數var()至關於函數mean(abs(x - x.mean())**2),其中x爲矩陣。 """ import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a.var()) # 結果 2.91666666667 print(a.var(axis=0)) # 結果 [ 2.25 2.25 2.25] print(a.var(axis=1)) # 結果 [ 0.66666667 0.66666667]
""" 標準差的函數爲std()。 std()至關於sqrt(mean(abs(x - x.mean())**2)),或至關於sqrt(x.var())。 """ import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a.std()) # 結果 1.70782512766 print(a.std(axis=0)) # 結果 [ 1.5 1.5 1.5] print(a.std(axis=1)) # 結果 [ 0.81649658 0.81649658]
""" 中值指的是將序列按大小順序排列後,排在中間的那個值,若是有偶數個數,則是排在中間兩個數的平均值。 例如序列[5,2,6,4,2],按大小順序排成 [2,2,4,5,6],排在中間的數是4,因此這個序列的中值是4。 又如序列[5,2,6,4,3,2],按大小順序排成 [2,2,3,4,5,6],由於有偶數個數,排在中間兩個數是三、4,因此這個序列中值是3.5。 中值的函數是median(),調用方法爲numpy.median(x,[axis]),axis可指定軸方向,默認axis=None,對全部數去中值。 """ import numpy as np x = np.array([[1,2,3],[4,5,6]]) print(np.median(x)) # 對全部數取中值 # 3.5 print(np.median(x,axis=0)) # 沿第一維方向取中值 # [ 2.5 3.5 4.5] print(np.median(x,axis=1)) # 沿第二維方向取中值 # [ 2. 5.]
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a.sum()) # 對整個矩陣求和 # 結果 21 print(a.sum(axis=0)) # 對行方向求和 # 結果 [5 7 9] print(a.sum(axis=1)) # 對列方向求和 # 結果 [ 6 15]
""" 某位置累積和指的是該位置以前(包括該位置)全部元素的和。 例如序列[1,2,3,4,5],其累計和爲[1,3,6,10,15],即第一個元素爲1,第二個元素爲1+2=3,……,第五個元素爲1+2+3+4+5=15。 矩陣求累積和的函數是cumsum(),能夠對行,列,或整個矩陣求累積和。 """ import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a.cumsum()) # 對整個矩陣求累積和 # [ 1 3 6 10 15 21] print(a.cumsum(axis=0)) # 對行方向求累積和 # [[1 2 3] # [5 7 9]] print(a.cumsum(axis=1)) # 對列方向求累積和 # [[ 1 3 6] # [ 4 9 15]]
import numpy as np a = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]) print(a) # [[ 1 2 3 4 5] # [ 6 7 8 9 10] # [11 12 13 14 15]] print(a.T) # [[ 1 6 11] # [ 2 7 12] # [ 3 8 13] # [ 4 9 14] # [ 5 10 15]] print(a.transpose()) # [[ 1 6 11] # [ 2 7 12] # [ 3 8 13] # [ 4 9 14] # [ 5 10 15]]
類型 | 類型代碼 | 說明 |
int八、uint8 | i一、u1 | 有符號和無符號8位整型(1字節) |
int1六、uint16 | i二、u2 | 有符號和無符號16位整型(2字節) |
int3二、uint32 | i四、u4 | 有符號和無符號32位整型(4字節) |
int6四、uint64 | i八、u8 | 有符號和無符號64位整型(8字節) |
float16 | f2 | 半精度浮點數 |
float32 | f四、f | 單精度浮點數 |
float64 | f八、d | 雙精度浮點數 |
float128 | f1六、g | 擴展精度浮點數 |
complex64 | c8 | 分別用兩個32位表示的複數 |
complex128 | c16 | 分別用兩個64位表示的複數 |
complex256 | c32 | 分別用兩個128位表示的複數 |
bool | ? | 布爾型 |
object | O | python對象 |
string | Sn | 固定長度字符串,每一個字符1字節,如S10 |
unicode | Un | 固定長度Unicode,字節數由系統決定,如U10 |
生成函數 | 做用 |
np.array( x)sql np.array( x, dtype)數據庫 |
將輸入數據轉化爲一個ndarrayjson 將輸入數據轉化爲一個類型爲type的ndarray數組 |
np.asarray( array ) | 將輸入數據轉化爲一個新的(copy)ndarray |
np.ones( N )數據結構 np.ones( N, dtype)app np.ones_like( ndarray )less |
生成一個N長度的一維全一ndarray 生成一個N長度類型是dtype的一維全一ndarray 生成一個形狀與參數相同的全一ndarray |
np.zeros( N) np.zeros( N, dtype) np.zeros_like(ndarray) |
生成一個N長度的一維全零ndarray 生成一個N長度類型位dtype的一維全零ndarray 相似np.ones_like( ndarray ) |
np.empty( N ) np.empty( N, dtype) np.empty(ndarray) |
生成一個N長度的未初始化一維ndarray 生成一個N長度類型是dtype的未初始化一維ndarray 相似np.ones_like( ndarray ) |
np.eye( N ) np.identity( N ) |
建立一個N * N的單位矩陣(對角線爲1,其他爲0) |
np.arange( num) np.arange( begin, end) np.arange( begin, end, step) |
生成一個從0到num-1步數爲1的一維ndarray 生成一個從begin到end-1步數爲1的一維ndarray 生成一個從begin到end-step的步數爲step的一維ndarray |
np.mershgrid(ndarray, ndarray,...) |
生成一個ndarray * ndarray * ...的多維ndarray |
np.where(cond, ndarray1, ndarray2) |
根據條件cond,選取ndarray1或者ndarray2,返回一個新的ndarray |
np.in1d(ndarray, [x,y,...]) |
檢查ndarray中的元素是否等於[x,y,...]中的一個,返回bool數組 |
矩陣函數 | 說明 |
np.diag( ndarray) np.diag( [x,y,...]) |
以一維數組的形式返回方陣的對角線(或非對角線)元素 將一維數組轉化爲方陣(非對角線元素爲0) |
np.dot(ndarray, ndarray) | 矩陣乘法 |
np.trace( ndarray) | 計算對角線元素的和 |
排序函數 |
說明 |
np.sort( ndarray) |
排序,返回副本 |
np.unique(ndarray) |
返回ndarray中的元素,排除重複元素以後,並進行排序 |
np.intersect1d( ndarray1, ndarray2) np.union1d( ndarray1, ndarray2) np.setdiff1d( ndarray1, ndarray2) np.setxor1d( ndarray1, ndarray2) |
返回兩者的交集並排序。 返回兩者的並集並排序。 返回兩者的差。 返回兩者的對稱差 |
一元計算函數 | 說明 |
np.abs(ndarray) np.fabs(ndarray) |
計算絕對值 計算絕對值(非複數) |
np.mean(ndarray) |
求平均值 |
np.sqrt(ndarray) |
計算x^0.5 |
np.square(ndarray) |
計算x^2 |
np.exp(ndarray) |
計算e^x |
log、log十、log二、log1p |
計算天然對數、底爲10的log、底爲2的log、底爲(1+x)的log |
np.sign(ndarray) |
計算正負號:1(正)、0(0)、-1(負) |
np.ceil(ndarray) np.floor(ndarray) np.rint(ndarray) |
計算大於等於改值的最小整數 計算小於等於該值的最大整數 四捨五入到最近的整數,保留dtype |
np.modf(ndarray) |
將數組的小數和整數部分以兩個獨立的數組方式返回 |
np.isnan(ndarray) |
返回一個判斷是不是NaN的bool型數組 |
np.isfinite(ndarray) np.isinf(ndarray) |
返回一個判斷是不是有窮(非inf,非NaN)的bool型數組 返回一個判斷是不是無窮的bool型數組 |
cos、cosh、sin、sinh、tan、tanh |
普通型和雙曲型三角函數 |
arccos、arccosh、arcsin、arcsinh、arctan、arctanh |
反三角函數和雙曲型反三角函數 |
np.logical_not(ndarray) |
計算各元素not x的真值,至關於-ndarray |
多元計算函數 |
說明 |
np.add(ndarray, ndarray) np.subtract(ndarray, ndarray) np.multiply(ndarray, ndarray) np.divide(ndarray, ndarray) np.floor_divide(ndarray, ndarray) np.power(ndarray, ndarray) np.mod(ndarray, ndarray) |
相加 相減 乘法 除法 圓整除法(丟棄餘數) 次方 求模 |
np.maximum(ndarray, ndarray) np.fmax(ndarray, ndarray) np.minimun(ndarray, ndarray) np.fmin(ndarray, ndarray) |
求最大值 求最大值(忽略NaN) 求最小值 求最小值(忽略NaN) |
np.copysign(ndarray, ndarray) |
將參數2中的符號賦予參數1 |
np.greater(ndarray, ndarray) np.greater_equal(ndarray, ndarray) np.less(ndarray, ndarray) np.less_equal(ndarray, ndarray) np.equal(ndarray, ndarray) np.not_equal(ndarray, ndarray) |
> >= < <= == != |
logical_and(ndarray, ndarray) logical_or(ndarray, ndarray) logical_xor(ndarray, ndarray) |
& | ^ |
np.dot( ndarray, ndarray) | 計算兩個ndarray的矩陣內積 |
np.ix_([x,y,m,n],...) | 生成一個索引器,用於Fancy indexing(花式索引) |
文件讀寫 | 說明 |
np.save(string, ndarray) | 將ndarray保存到文件名爲 [string].npy 的文件中(無壓縮) |
np.savez(string, ndarray1, ndarray2, ...) | 將全部的ndarray壓縮保存到文件名爲[string].npy的文件中 |
np.savetxt(sring, ndarray, fmt, newline='\n') | 將ndarray寫入文件,格式爲fmt |
np.load(string) | 讀取文件名string的文件內容並轉化爲ndarray對象(或字典對象) |
np.loadtxt(string, delimiter) | 讀取文件名string的文件內容,以delimiter爲分隔符轉化爲ndarray |
ndarray.ndim | 獲取ndarray的維數 |
ndarray.shape | 獲取ndarray各個維度的長度 |
ndarray.dtype | 獲取ndarray中元素的數據類型 |
ndarray.T | 簡單轉置矩陣ndarray |
函數 | 說明 |
ndarray.astype(dtype) | 轉換類型,若轉換失敗則會出現TypeError |
ndarray.copy() | 複製一份ndarray(新的內存空間) |
ndarray.reshape((N,M,...)) | 將ndarray轉化爲N*M*...的多維ndarray(非copy) |
ndarray.transpose((xIndex,yIndex,...)) | 根據維索引xIndex,yIndex...進行矩陣轉置,依賴於shape,不能用於一維矩陣(非copy) |
ndarray.swapaxes(xIndex,yIndex) | 交換維度(非copy) |
計算函數 | 說明 |
ndarray.mean( axis=0 ) | 求平均值 |
ndarray.sum( axis= 0) | 求和 |
ndarray.cumsum( axis=0) ndarray.cumprod( axis=0) |
累加 累乘 |
ndarray.std() ndarray.var() |
方差 標準差 |
ndarray.max() ndarray.min() |
最大值 最小值 |
ndarray.argmax() ndarray.argmin() |
最大值索引 最小值索引 |
ndarray.any() ndarray.all() |
是否至少有一個True 是否所有爲True |
ndarray.dot( ndarray) |
計算矩陣內積 |
排序函數 |
說明 |
ndarray.sort(axis=0) |
排序,返回源數據 |
ndarray[n] | 選取第n+1個元素 |
ndarray[n:m] | 選取第n+1到第m個元素 |
ndarray[:] | 選取所有元素 |
ndarray[n:] | 選取第n+1到最後一個元素 |
ndarray[:n] | 選取第0到第n個元素 |
ndarray[ bool_ndarray ] 注:bool_ndarray表示bool類型的ndarray |
選取爲true的元素 |
ndarray[[x,y,m,n]]... |
選取順序和序列爲x、y、m、n的ndarray |
ndarray[n,m] ndarray[n][m] |
選取第n+1行第m+1個元素 |
ndarray[n,m,...] ndarray[n][m].... |
選取n行n列....的元素 |
函數 | 說明 |
seed() seed(int) seed(ndarray) |
肯定隨機數生成種子 |
permutation(int) permutation(ndarray) |
返回一個一維從0~9的序列的隨機排列 返回一個序列的隨機排列 |
shuffle(ndarray) | 對一個序列就地隨機排列 |
rand(int) randint(begin,end,num=1) |
產生int個均勻分佈的樣本值 從給定的begin和end隨機選取num個整數 |
randn(N, M, ...) | 生成一個N*M*...的正態分佈(平均值爲0,標準差爲1)的ndarray |
normal(size=(N,M,...)) | 生成一個N*M*...的正態(高斯)分佈的ndarray |
beta(ndarray1,ndarray2) | 產生beta分佈的樣本值,參數必須大於0 |
chisquare() | 產生卡方分佈的樣本值 |
gamma() | 產生gamma分佈的樣本值 |
uniform() | 產生在[0,1)中均勻分佈的樣本值 |
函數 | 說明 |
det(ndarray) | 計算矩陣列式 |
eig(ndarray) | 計算方陣的本徵值和本徵向量 |
inv(ndarray) pinv(ndarray) |
計算方陣的逆 計算方陣的Moore-Penrose僞逆 |
qr(ndarray) | 計算qr分解 |
svd(ndarray) | 計算奇異值分解svd |
solve(ndarray) | 解線性方程組Ax = b,其中A爲方陣 |
lstsq(ndarray) | 計算Ax=b的最小二乘解 |
pandas是一個強大的Python數據分析的工具包。 pandas是基於NumPy構建的。 pandas的主要功能 具有對其功能的數據結構DataFrame、Series 集成時間序列功能 提供豐富的數學運算和操做 靈活處理缺失數據
http://pandas.pydata.org/pandas-docs/stable/index.html
pip install pandas import pandas # import pandas as pd # from pandas import Series, DataFrame
# 查看pandas版本
pandas.show_version()
pandas.__version__
與列表不一樣,Series/DataFrame切片時並不會自動複製,在切片上的修改會影響原數據。 【解決方法:copy()】
過程略。
""" Series是一種相似於一位數組的對象,由一組數據和一組與之相關的數據標籤(索引)組成。 Series比較像列表(數組)和字典的結合體 """ import pandas as pd a = pd.Series([4,7,-5,3]) # 0 4 # 1 7 # 2 -5 # 3 3 # dtype: int64 b = pd.Series([4,7,-5,3],index=['a','b','c','d']) # a 4 # b 7 # c -5 # d 3 # dtype: int64 c = pd.Series({'a':1, 'b':2}) # a 1 # b 2 # dtype: int64 d = pd.Series(0, index=['a','b','c','d']) # a 0 # b 0 # c 0 # d 0 # dtype: int64
""" """ import numpy as np import pandas as pd sr = pd.Series([1,2,3,4]) # 0 1 # 1 2 # 2 3 # 3 4 # dtype: int64 print(sr.dtypes) # int64 sr = sr.astype(float) print(sr.dtypes) # float64 print(sr) # 0 1.0 # 1 2.0 # 2 3.0 # 3 4.0 # dtype: float64
import numpy as np import pandas as pd sr = pd.Series(np.arange(4.0)) print(sr) # 0 0.0 # 1 1.0 # 2 2.0 # 3 3.0 # dtype: float64 sr.index = ["a","b","c","d"] print(sr) # a 0.0 # b 1.0 # c 2.0 # d 3.0 # dtype: float64
""" s4[3] s4['e'] s4[[1,3,5]] s4[['a','b','d','f']] s4[:4] s4['c':] s4['b':'e'] """ import numpy as np import pandas as pd sr = pd.Series(np.arange(4.0)) print(sr) # 0 0.0 # 1 1.0 # 2 2.0 # 3 3.0 # dtype: float64 sr.index = ["a","b","c","d"] print(sr) # a 0.0 # b 1.0 # c 2.0 # d 3.0 # dtype: float64 print(sr[0]) # 0.0 print(sr["a"]) # 0.0 print(sr[[0,2,3]]) # a 0.0 # c 2.0 # d 3.0 # dtype: float64 print(sr[["a","c","d"]]) # a 0.0 # c 2.0 # d 3.0 # dtype: float64 print(sr[:3]) # a 0.0 # b 1.0 # c 2.0 # dtype: float64 print(sr["c":]) # c 2.0 # d 3.0 # dtype: float64 print(sr['b':'d']) # b 1.0 # c 2.0 # d 3.0 # dtype: float64
# loc 對應標籤 # iloc 對應index import numpy as np import pandas as pd sr1 = pd.Series(np.array([10,15,20,30,55,80]),index = ['a','b','c','d','e','f']) print(sr1.iloc[1]) # 15 print(sr1.iloc[3:]) # d 30 # e 55 # f 80 # dtype: int32 print(sr1.iloc[3:5]) # 注意,不包含右邊界數據 # d 30 # e 55 # dtype: int32 print(sr1.loc['b']) # 15 print(sr1.loc['d':]) print(sr1.loc["d":"f"]) # 注意,這是左右包含邊界數據 # d 30 # e 55 # f 80 # dtype: int32
import numpy as np import pandas as pd data=pd.Series(np.random.rand(9), index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], [1,2,3,1,2,3,1,2,3]]) print(data) # a 1 0.369071 # 2 0.799169 # 3 0.633432 # b 1 0.080917 # 2 0.484825 # 3 0.462479 # c 1 0.463004 # 2 0.591250 # 3 0.541369 # dtype: float64
注意:
import numpy as np import pandas as pd # sr1 = pd.Series(np.array([10,15,20,30,55,80]),index = ['a','b','c','d','e','f']) sr1 = pd.Series(np.array([10,15,20,30,55,80]),index = [1,2,3,4,5,6]) print(sr1) # 1 10 # 2 15 # 3 20 # 4 30 # 5 55 # 6 80 # dtype: int32 print(sr1[1]) # 10
注意:Series對象運算時,可以使用fill_value參數進行缺失數據補全
import numpy as np import pandas as pd sr1 = pd.Series([12,23,34], index=['c','a','d']) sr3 = pd.Series([11,20,10,14], index=['d','c','a','b']) print(sr1.add(sr3,fill_value=0)) # a 33.0 # b 14.0 # c 32.0 # d 45.0 # dtype: float64 # 同理: add, sub, div, mul
""" 缺失數據:使用NaN(Not a Number)來表示缺失數據。其值等於np.nan。內置的None值也會被當作NaN處理。 處理缺失數據的相關方法: dropna() 過濾掉值爲NaN的行 fillna() 填充缺失數據 isnull() 返回布爾數組,缺失值對應爲True notnull() 返回布爾數組,缺失值對應爲False 過濾缺失數據:sr.dropna() 或 sr[data.notnull()] 填充缺失數據:fillna(0) """
import numpy as np import pandas as pd sr1 = pd.Series([12,23,34,None], index=['a','b','c', 'd']) print(sr1.dropna()) # 等同於sr1[sr1.notnull()] # a 12.0 # b 23.0 # c 34.0 # dtype: float64 print(sr1.fillna(0)) # a 12.0 # b 23.0 # c 34.0 # d 0.0 # dtype: float64 print(sr1.isnull()) # a False # b False # c False # d True # dtype: bool print(sr1.notnull()) # a True # b True # c True # d False # dtype: bool
Series支持NumPy模塊的特性(下標): 從ndarray建立Series:Series(arr) 與標量運算:sr*2 兩個Series運算:sr1+sr2 索引:sr[0], sr[[1,2,4]] 切片:sr[0:2] 通用函數:np.abs(sr) 布爾值過濾:sr[sr>0] Series支持字典的特性(標籤): 從字典建立Series:Series(dic), in運算:’a’ in sr 鍵索引:sr['a'], sr[['a', 'b', 'd']]
注意:
import numpy as np import pandas as pd sr1 = pd.Series([12,23,34], index=['c','a','d']) sr2 = pd.Series([11,20,10], index=['d','c','a',]) print(sr1+sr2) # a 33 # c 32 # d 45 # dtype: int64 sr3 = pd.Series([11,20,10,14], index=['d','c','a','b']) print(sr1+sr3) # a 33.0 # b NaN # c 32.0 # d 45.0 # dtype: float64
DataFrame是一個表格型的數據結構,含有一組有序的列。
DataFrame能夠被看作是由Series組成的字典,而且共用一個索引。
import numpy as np import pandas as pd df = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]}) print(df) # one two # 0 1 4 # 1 2 3 # 2 3 2 # 3 4 1 df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d'])}) print(df) # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 # d NaN 4
import numpy as np import pandas as pd df = pd.read_csv("test.csv") # 從csv導入爲DataFrame print(df) """ date open high ... v_ma10 v_ma20 turnover 0 2018-05-25 28.11 28.28 ... 42531.08 50972.04 1.09 1 2018-05-24 28.11 28.49 ... 44772.36 52807.80 0.82 2 2018-05-23 28.18 28.53 ... 45845.72 53660.69 1.21 ... """ df.to_csv("new.csv") # 寫入csv文件
df = pd.read_csv("601318.csv") #默認以,爲分隔符 - pd.read_csv("601318.csv",sep='\s+') #匹配空格,支持正則表達式 - pd.read_table("601318.csv",sep=',') #和df = pd.read_csv("601318.csv") 同樣 - pd.read_excle("601318.xlsx") #讀Excel文件 sep:指定分隔符 header = NOne,就會吧默認的表名去除 了 df.rename(column={0:'a',1:"b"}) #修改列名 pd.read_csv(index_col=0) #第0列 若是想讓時間成爲索引 pd.read_csv(index_col='date') #時間列 pd.read_csv(index_col='date',parse_datas=True) #時間列 parse_datas轉換爲時間對象,設爲true是吧全部能轉的都轉 pd.read_csv(index_col='date',parse_datas=['date']) #知識吧date的那一列轉換成時間對象 na_values=['None'] #吧表裏面爲None的轉換成NaN,是吧字符串轉換成缺失值 na_rep() #是吧缺失值nan轉換成字符串 cols #指定輸出的列,傳入列表
# -*- coding:utf-8 -*- import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d'])}) df2 = pd.DataFrame({'one':pd.Series([5,6,7],index=['a','b','c']), 'three':pd.Series([2,4,6],index=['a','b','c'])}) # print(df.drop(["two"],axis=1)) # one # a 1.0 # b 2.0 # c 3.0 # d NaN df3 = pd.concat([df,df2]) # 拼接 兩df,axis默認=0,對應位置無值的填NaN # one three two # a 1.0 NaN 2.0 # b 2.0 NaN 1.0 # c 3.0 NaN 3.0 # d NaN NaN 4.0 # a 5.0 2.0 NaN # b 6.0 4.0 NaN # c 7.0 6.0 NaN x = pd.concat([df,df2],axis=1) # one two one three # a 1.0 2 5.0 2.0 # b 2.0 1 6.0 4.0 # c 3.0 3 7.0 6.0 # d NaN 4 NaN NaN df4 = pd.DataFrame(df3,columns=["one","two","three","ten"]) # 新增一列ten,填充值爲NaN # one two three ten # a 1.0 2.0 NaN NaN # b 2.0 1.0 NaN NaN # c 3.0 3.0 NaN NaN # d NaN 4.0 NaN NaN # a 5.0 NaN 2.0 NaN # b 6.0 NaN 4.0 NaN # c 7.0 NaN 6.0 NaN df4["xyz"] = 9999 # one two three ten xyz # a 1.0 2.0 NaN NaN 9999 # b 2.0 1.0 NaN NaN 9999 # c 3.0 3.0 NaN NaN 9999 # d NaN 4.0 NaN NaN 9999 # a 5.0 NaN 2.0 NaN 9999 # b 6.0 NaN 4.0 NaN 9999 # c 7.0 NaN 6.0 NaN 9999
# -*- coding:utf-8 -*- import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d']),'three':pd.Series([8,9,10,11,12],index=['a','b','c','d','e'])}) del df["two"] print(df) # one three # a 1.0 8 # b 2.0 9 # c 3.0 10 # d NaN 11 # e NaN 12 print(df.drop("c")) # one two three # a 1.0 2.0 8 # b 2.0 1.0 9 # d NaN 4.0 11 # e NaN NaN 12 print(df.drop("three",axis=1)) # one two # a 1.0 2.0 # b 2.0 1.0 # c 3.0 3.0 # d NaN 4.0 # e NaN NaN df = pd.DataFrame({'one':pd.Series([1,2,3]), 'two':pd.Series([1,2,3,4]),'three':pd.Series([8,9,10,11,12])}) # one two three # 0 1.0 1.0 8 # 1 2.0 2.0 9 # 2 3.0 3.0 10 # 3 NaN 4.0 11 # 4 NaN NaN 12 print(df.drop([0,2,4])) # one two three # 1 2.0 2.0 9 # 3 NaN 4.0 11
# -*- coding:utf-8 -*- import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d']),'three':pd.Series([8,9,10,11,12],index=['a','b','c','d','e'])}) # one two three # a 1.0 2.0 8 # b 2.0 1.0 9 # c 3.0 3.0 10 # d NaN 4.0 11 # e NaN NaN 12 df.loc["b"] = "B" df.loc["c"].loc["three"] = 8888 print(df) # one two three # a 1 2 8 # b B B B # c 3 3 8888 # d NaN 4 11 # e NaN NaN 12
# -*- coding:utf-8 -*- import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d']),'three':pd.Series([8,9,10,11,12],index=['a','b','c','d','e'])}) # one two three # a 1.0 2.0 8 # b 2.0 1.0 9 # c 3.0 3.0 10 # d NaN 4.0 11 # e NaN NaN 12 print(df.dtypes) # one float64 # two float64 # three int64 # dtype: object df["three"] = df["three"].astype(float) print(df.dtypes) # one float64 # two float64 # three float64 # dtype: object print(df) # one two three # a 1.0 2.0 8.0 # b 2.0 1.0 9.0 # c 3.0 3.0 10.0 # d NaN 4.0 11.0 # e NaN NaN 12.0
""" index 獲取索引 columns 獲取列索引 T 轉置 values 獲取值數組 describe() 獲取快速統計 """ import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d'])}) # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 # d NaN 4 print(df.index) # Index(['a', 'b', 'c', 'd'], dtype='object') print(df.columns) # Index(['one', 'two'], dtype='object') print(df.values) # <class 'numpy.ndarray'> # [[ 1. 2.] # [ 2. 1.] # [ 3. 3.] # [nan 4.]] print(df.describe()) # one two # count 3.0 4.000000 # mean 2.0 2.500000 # std 1.0 1.290994 # min 1.0 1.000000 # 25% 1.5 1.750000 # 50% 2.0 2.500000 # 75% 2.5 3.250000 # max 3.0 4.000000 print(df.T) # a b c d # one 1.0 2.0 3.0 NaN # two 2.0 1.0 3.0 4.0
""" df[‘A’] # 單個時,表示列 df[[‘A’, ‘B’]] # 單個花式索引,表示列 df[‘A’][0] # 第一個是列,單列表示Series,[0]表示索引 df[0:10][[‘A’, ‘C’]] # 切片時,表示行;第二個花式索引表示列 df.loc[:,[‘A’,‘B’]] # 第一個表示行 df.loc[:,'A':'C'] # 行,列 df.loc[0,'A'] # 行,列 df.loc[0:10,['A','C']] # 出錯,loc對應的參數爲索引,若是用index,則須要用iloc print(df.iloc[0:2,0:1]) # iloc對應是index """ import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d'])}) # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 # d NaN 4 print(df["one"]) # 單個時,表示列 # a 1.0 # b 2.0 # c 3.0 # d NaN # Name: one, dtype: float64 print(df["one"]["a"]) # 單個花式索引,表示列 # 1.0 print(df[["one","two"]]) # 第一個是列,單列表示Series,[0]表示索引 # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 # d NaN 4 print(df[1:3][["one","two"]]) # 切片時,表示行;第二個花式索引表示列 # one two # b 2.0 1 # c 3.0 3
""" df.loc[:,[‘A’,‘B’]] # 第一個表示行 df.loc[:,'A':'C'] # 行,列 df.loc[0,'A'] # 行,列 df.loc[0:10,['A','C']] # 出錯,loc對應的參數爲索引,若是用index,則須要用iloc df.iloc[3] df.iloc[3,3] df.iloc[0:3,4:6] df.iloc[1:5,:] df.iloc[[1,2,4],[0,3]] """ import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d'])}) # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 # d NaN 4 print(df.loc["a":"c",["one","two"]]) # 行,列 # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 print(df.loc[:,'one':'two']) # 行,列 # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 # d NaN 4 print(df.loc["a",'two']) # 行,列 # 2 # print(df.loc[0:2,["one","two"]]) # 出錯,loc對應的參數爲索引,若是用index,則須要用iloc # 出錯 print(df.iloc[0:2,0:1]) # iloc對應是index # one # a 1.0 # b 2.0 print(df.iloc[3]) # one NaN # two 4.0 # Name: d, dtype: float64 print(df.iloc[0:3,0:2]) # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 print(df.iloc[1:3,:]) # one two # b 2.0 1 # c 3.0 3 print(df.iloc[[1,2],[0,1]]) # one two # b 2.0 1 # c 3.0 3
""" df[df['A']>0] df[df['A'].isin([1,3,5])] df[df<0] = 0 """ import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d'])}) # one two # a 1.0 2 # b 2.0 1 # c 3.0 3 # d NaN 4 print(df[df["one"] > 2]) # one two # c 3.0 3 print(df[df['one'].isin([1,3,5])]) # one two # a 1.0 2 # c 3.0 3 df[df<=2] = 0 print(df) # one two # a 0.0 0 # b 0.0 0 # c 3.0 3 # d NaN 4
DataFrame處理缺失數據的方法: dropna(axis=0,how=‘any’,…) # 行axis=0,列axis=1 fillna() # method="ffill" 使用前值填充 # method="bfill" 使用後值填充 # 字典,根據列進行填充 isnull() notnull()
""" DataFrame處理缺失數據的方法: dropna(axis=0,how=‘any’,…) # 行axis=0,列axis=1 fillna() # method="ffill" 使用前值填充 # method="bfill" 使用後值填充 # 字典,根據列進行填充 isnull() notnull() """ import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([None,None,3,4],index=['b','a','c','d'])}) # one two # a 1.0 NaN # b 2.0 NaN # c 3.0 3.0 # d NaN 4.0 print(df.dropna(axis=0,how="any")) # 默認axis=0 行axis=0,列axis=1 # one two # c 3.0 3.0 print(df.dropna(axis=1,how="any")) # 因爲兩列均有None,則都drop掉 # Empty DataFrame # Columns: [] # Index: [a, b, c, d] print(df.fillna(10000000)) # 等價於 df[df.isnull()] = 10000000 # one two # a 1.0 10000000.0 # b 2.0 10000000.0 # c 3.0 3.0 # d 10000000.0 4.0 print(df.fillna(method="ffill")) # one two # a 1.0 NaN # b 2.0 NaN # c 3.0 3.0 # d 3.0 4.0 print(df.fillna(method="bfill")) # one two # a 1.0 3.0 # b 2.0 3.0 # c 3.0 3.0 # d NaN 4.0 print(df.fillna({"one":2000,"two":1999})) # one two # a 1.0 1999.0 # b 2.0 1999.0 # c 3.0 3.0 # d 2000.0 4.0 print(df.isnull()) # one two # a False True # b False True # c False False # d True False print(df.notnull()) # one two # a True False # b True False # c True True # d False True
""" mean(axis=0,skipna=False) sum(axis=1) sort_index(axis, …, ascending) 按行或列索引排序,ascending=True/False順序、倒序 sort_values(by, axis, ascending) 按值排序 NumPy的通用函數一樣適用於pandas apply(func, axis=0) 將自定義函數應用在各行或者各列上 ,func可返回標量或者Series applymap(func) 將函數應用在DataFrame各個元素上 map(func) 將函數應用在Series各個元素上 """ import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([None,None,3,4],index=['b','a','c','d'])}) # one two # a 1.0 NaN # b 2.0 NaN # c 3.0 3.0 # d NaN 4.0 print(df.mean(axis=0)) # 按列取平均 # one 2.0 # two 3.5 # dtype: float64 print(df.mean(axis=0,skipna=False)) # 按列取平均 # one NaN # two NaN # dtype: float64 print(df.mean(axis=1)) # 按行取平均 # a 1.0 # b 2.0 # c 3.0 # d 4.0 # dtype: float64 print(df.sum(axis=0)) # print(df.sum(axis=0,skipna=False)) # one 6.0 # two 7.0 # dtype: float64 print(df.sum(axis=1)) # a 1.0 # b 2.0 # c 6.0 # d 4.0 # dtype: float64 print(df.sort_index(axis=0,ascending=True)) # one two # a 1.0 NaN # b 2.0 NaN # c 3.0 3.0 # d NaN 4.0 print(df.sort_values(by=["two","one"],axis=0,ascending=False)) # 先two後one進行排序 # one two # d NaN 4.0 # c 3.0 3.0 # b 2.0 NaN # a 1.0 NaN def f(x): return x ** x print(df.apply(f)) # one two # a 1.0 NaN # b 4.0 NaN # c 27.0 27.0 # d NaN 256.0 print(df.applymap(f)) # one two # a 1.0 NaN # b 4.0 NaN # c 27.0 27.0 # d NaN 256.0 x = pd.Series(np.arange(10)) print(x.apply(f)) # 0 1 # 1 1 # 2 4 # 3 27 # 4 256 # 5 3125 # 6 46656 # 7 823543 # 8 16777216 # 9 387420489 # dtype: int64 print(x.map(f)) # 0 1 # 1 1 # 2 4 # 3 27 # 4 256 # 5 3125 # 6 46656 # 7 823543 # 8 16777216 # 9 387420489 # dtype: int64
import numpy as np import pandas as pd df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([None,None,3,4],index=['b','a','c','d'])}) # one two # a 1.0 NaN # b 2.0 NaN # c 3.0 3.0 # d NaN 4.0 # 查詢數據的前n行或末尾n行 print(df.head(3)) # one two # a 1.0 NaN # b 2.0 NaN # c 3.0 3.0 print(df.tail(2)) # one two # c 3.0 3.0 # d NaN 4.0
從文件讀取 """ 讀取文件:從文件名、URL、文件對象中加載數據 read_csv 默認分隔符爲, read_table 默認分隔符爲\t 讀取文件函數主要參數: sep 指定分隔符,可用正則表達式如'\s+' header=None 指定文件無列名 name 指定列名 index_col 指定某列做爲索引 na_values 指定某些字符串表示缺失值 parse_dates 指定某些列是否被解析爲日期,布爾值或列表 nrows 指定讀取幾行文件 chunksize 分塊讀取文件,指定塊大小 skip_row (多是skiprows,版本) 指定跳過某些行 """ 寫入到文件: """ to_csv 寫入文件函數的主要參數: sep na_rep 指定缺失值轉換的字符串,默認爲空字符串 header=False 不輸出列名一行 index=False 不輸出行索引一列 cols 指定輸出的列,傳入列表 其餘文件類型:json, XML, HTML, 數據庫 pandas轉換爲二進制文件格式(pickle): save load """
時間序列類型: 時間戳:特定時刻 固定時期:如2017年7月 時間間隔:起始時間-結束時間 Python標準庫:datetime datetime.datetime.timedelta # 表示 時間間隔 dt.strftime() #f:format吧時間對象格式化成字符串 strptime() #吧字符串解析成時間對象p:parse 靈活處理時間對象:dateutil包 dateutil.parser.parse('2018/1/29') dateutil.parser.parse('27/6/2017',dayfirst =True) 成組處理時間對象:pandas pd.to_datetime(['2001-01-01', '2002-02-02']) DatetimeIndex(['2001-01-01', '2002-02-02'], dtype='datetime64[ns]', freq=None) 產生時間對象數組:date_range start 開始時間 end 結束時間 periods 時間長度 freq 時間頻率,默認爲'D',可選H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),… import pandas as pd import numpy as np x = pd.date_range(start="2015-01-01",periods=100,freq="D") x = pd.date_range(start="2015-01-01",end="2016-01-01",freq="D") print(x)
1、時間序列就是以時間對象爲索引的Series或DataFrame。 2、datetime對象做爲索引時是存儲在DatetimeIndex對象中的。 3、時間序列特殊功能: 傳入「年」或「年月」做爲切片方式 傳入日期範圍做爲切片方式 豐富的函數支持:resample(), strftime(), …… 批量轉換爲datetime對象:to_pydatetime()
import pandas as pd import numpy as np dates = ['2017-06-20','2017-06-21','2017-06-22','2017-06-23','2017-06-24','2017-06-25','2017-06-26','2017-06-27'] ts = pd.Series(np.random.randn(8),index = pd.to_datetime(dates)) print(ts) # 2017-06-20 -0.228449 # 2017-06-21 0.938766 # 2017-06-22 0.474168 # 2017-06-23 -0.868375 # 2017-06-24 0.777883 # 2017-06-25 -1.248373 # 2017-06-26 -0.306503 # 2017-06-27 0.406621 # dtype: float64 print(ts.index) # DatetimeIndex(['2017-06-20', '2017-06-21', '2017-06-22', '2017-06-23', # '2017-06-24', '2017-06-25', '2017-06-26', '2017-06-27'], # dtype='datetime64[ns]', freq=None) print(ts["20170622"]) # 0.4741684129056889 print(ts["2017-06-24":"20170627"]) # 2017-06-24 0.543603 # 2017-06-25 0.006838 # 2017-06-26 0.953454 # 2017-06-27 0.870791 # dtype: float64
import pandas as pd import numpy as np df = pd.read_csv("test.csv",index_col="date") print(df) # open high close ... v_ma10 v_ma20 turnover # date ... # 2018-05-25 28.11 28.28 27.35 ... 42531.08 50972.04 1.09 # 2018-05-24 28.11 28.49 28.04 ... 44772.36 52807.80 0.82 # 2018-05-23 28.18 28.53 28.03 ... 45845.72 53660.69 1.21 # 2018-05-22 26.88 28.50 28.20 ... 45417.26 54292.05 2.11 # 2018-05-21 26.40 27.08 26.76 ... 43111.53 53120.01 1.39
函數 | 說明 |
pd.isnull(series) pd.notnull(series) |
判斷是否爲空(NaN) 判斷是否不爲空(not NaN) |
屬性 | 說明 |
values | 獲取數組 |
index | 獲取索引 |
name | values的name |
index.name | 索引的name |
函數 | 說明 |
Series([x,y,...])Series({'a':x,'b':y,...}, index=param1) | 生成一個Series |
Series.copy() | 複製一個Series |
Series.reindex([x,y,...], fill_value=NaN) Series.reindex([x,y,...], method=NaN) Series.reindex(columns=[x,y,...]) |
重返回一個適應新索引的新對象,將缺失值填充爲fill_value 返回適應新索引的新對象,填充方式爲method 對列進行從新索引
reindex的method選項: |
Series.drop(index) | 丟棄指定項 |
Series.map(f) | 應用元素級函數 |
排序函數 | 說明 |
Series.sort_index(ascending=True) | 根據索引返回已排序的新對象 |
Series.order(ascending=True) | 根據值返回已排序的對象,NaN值在末尾 |
Series.rank(method='average', ascending=True, axis=0) | 爲各組分配一個平均排名
rank的method選項 |
df.argmax() df.argmin() |
返回含有最大值的索引位置 返回含有最小值的索引位置 |
屬性 | 說明 |
values | DataFrame的值 |
index | 行索引 |
index.name | 行索引的名字 |
columns | 列索引 |
columns.name | 列索引的名字 |
ix | 返回行的DataFrame |
ix[[x,y,...], [x,y,...]] | 對行從新索引,而後對列從新索引 |
T | frame行列轉置 |
函數 | 說明 |
DataFrame(dict, columns=dict.index, index=[dict.columnnum]) DataFrame(二維ndarray) DataFrame(由數組、列表或元組組成的字典) DataFrame(NumPy的結構化/記錄數組) DataFrame(由Series組成的字典) DataFrame(由字典組成的字典) DataFrame(字典或Series的列表) DataFrame(由列表或元組組成的列表) DataFrame(DataFrame) DataFrame(NumPy的MaskedArray) |
構建DataFrame 數據矩陣,還能夠傳入行標和列標 每一個序列會變成DataFrame的一列。全部序列的長度必須相同 相似於「由數組組成的字典」 每一個Series會成爲一列。若是沒有顯式制定索引,則各Series的索引會被合併成結果的行索引 各內層字典會成爲一列。鍵會被合併成結果的行索引。 各項將會成爲DataFrame的一行。索引的並集會成爲DataFrame的列標。 相似於二維ndarray 沿用DataFrame 相似於二維ndarray,但掩碼結果會變成NA/缺失值
|
df.reindex([x,y,...], fill_value=NaN, limit) df.reindex([x,y,...], method=NaN) df.reindex([x,y,...], columns=[x,y,...],copy=True) |
返回一個適應新索引的新對象,將缺失值填充爲fill_value,最大填充量爲limit 返回適應新索引的新對象,填充方式爲method 同時對行和列進行從新索引,默認複製新對象。 |
df.drop(index, axis=0) | 丟棄指定軸上的指定項。 |
排序函數 | 說明 |
df.sort_index(axis=0, ascending=True) df.sort_index(by=[a,b,...]) |
根據索引排序 |
彙總統計函數 | 說明 |
df.count() | 非NaN的數量 |
df.describe() | 一次性產生多個彙總統計 |
df.min() df.min() |
最小值 最大值 |
df.idxmax(axis=0, skipna=True) df.idxmin(axis=0, skipna=True) |
返回含有最大值的index的Series 返回含有最小值的index的Series |
df.quantile(axis=0) | 計算樣本的分位數 |
df.sum(axis=0, skipna=True, level=NaN) df.mean(axis=0, skipna=True, level=NaN) df.median(axis=0, skipna=True, level=NaN) df.mad(axis=0, skipna=True, level=NaN) df.var(axis=0, skipna=True, level=NaN) df.std(axis=0, skipna=True, level=NaN) df.skew(axis=0, skipna=True, level=NaN) df.kurt(axis=0, skipna=True, level=NaN) df.cumsum(axis=0, skipna=True, level=NaN) df.cummin(axis=0, skipna=True, level=NaN) df.cummax(axis=0, skipna=True, level=NaN) df.cumprod(axis=0, skipna=True, level=NaN) df.diff(axis=0) df.pct_change(axis=0) |
返回一個含有求和小計的Series 返回一個含有平均值的Series 返回一個含有算術中位數的Series 返回一個根據平均值計算平均絕對離差的Series 返回一個方差的Series 返回一個標準差的Series 返回樣本值的偏度(三階距) 返回樣本值的峯度(四階距) 返回樣本的累計和 返回樣本的累計最大值 返回樣本的累計最小值 返回樣本的累計積 返回樣本的一階差分 返回樣本的百分比數變化 |
計算函數 | 說明 |
df.add(df2, fill_value=NaN, axist=1) df.sub(df2, fill_value=NaN, axist=1) df.div(df2, fill_value=NaN, axist=1) df.mul(df2, fill_value=NaN, axist=1) |
元素級相加,對齊時找不到元素默認用fill_value 元素級相減,對齊時找不到元素默認用fill_value 元素級相除,對齊時找不到元素默認用fill_value 元素級相乘,對齊時找不到元素默認用fill_value |
df.apply(f, axis=0) | 將f函數應用到由各行各列所造成的一維數組上 |
df.applymap(f) | 將f函數應用到各個元素上 |
df.cumsum(axis=0, skipna=True) | 累加,返回累加後的dataframe |
索引方式 | 說明 |
df[val] | 選取DataFrame的單個列或一組列 |
df.ix[val] | 選取Dataframe的單個行或一組行 |
df.ix[:,val] | 選取單個列或列子集 |
df.ix[val1,val2] | 將一個或多個軸匹配到新索引 |
reindex方法 | 將一個或多個軸匹配到新索引 |
xs方法 | 根據標籤選取單行或者單列,返回一個Series |
icol、irow方法 | 根據整數位置選取單列或單行,並返回一個Series |
get_value、set_value | 根據行標籤和列標籤選取單個值 |
主要的Index對象 | 說明 |
Index | 最普遍的Index對象,將軸標籤表示爲一個由Python對象組成的NumPy數組 |
Int64Index | 針對整數的特殊Index |
MultiIndex | 「層次化」索引對象,表示單個軸上的多層索引。能夠看作由元組組成的數組 |
DatetimeIndex | 存儲納秒級時間戳(用NumPy的Datetime64類型表示) |
PeriodIndex | 針對Period數據(時間間隔)的特殊Index |
函數 | 說明 |
Index([x,y,...]) | 建立索引 |
append(Index) | 鏈接另外一個Index對象,產生一個新的Index |
diff(Index) | 計算差集,產生一個新的Index |
intersection(Index) | 計算交集 |
union(Index) | 計算並集 |
isin(Index) | 檢查是否存在與參數索引中,返回bool型數組 |
delete(i) | 刪除索引i處元素,獲得新的Index |
drop(str) | 刪除傳入的值,獲得新Index |
insert(i,str) | 將元素插入到索引i處,獲得新Index |
is_monotonic() | 當各元素大於前一個元素時,返回true |
is_unique() | 當Index沒有重複值時,返回true |
unique() | 計算Index中惟一值的數組 |
http://www.cnblogs.com/prpl/p/5537417.html
http://www.cnblogs.com/smallpi/p/4550361.html
https://www.cnblogs.com/nxld/p/6058591.html # 還有pandas的數據透視表,類sql操做的groupby、連表
官網: