關(guān)鍵詞: Python
numpy和pandas的常用函數(shù)及方法。
#數(shù)組開(kāi)方運(yùn)算函數(shù)>>>arr = np.arange(4)>>>arrarray([0, 1, 2, 3])>>>np.sqrt(arr)array([ 0. , 1. , 1.41421356, 1.73205081])
>>>np.modf(np.sqrt(arr))(array([ 0. , 0. , 0.41421356, 0.73205081]), array([ 0., 1., 1., 1.]))
一元ufunc
np.abs()、np.fabs() #計(jì)算整數(shù)、浮點(diǎn)數(shù)或復(fù)數(shù)的絕對(duì)值。對(duì)于非復(fù)數(shù)值,可以使用更快的fabs
np.sqrt() #計(jì)算各元素的平方根,相當(dāng)于arr ** 0.5
np.square() #計(jì)算各元素的平方。相當(dāng)于arr ** 2
np.exp() #計(jì)算各元素的指數(shù)
np.log()、np.log10()、np.log2()、np.log1p() #分別為自然對(duì)數(shù)(e)、底數(shù)為10、底數(shù)為2、log(1+x)
np.sign() #計(jì)算各元素的正負(fù)號(hào):1(正數(shù))、0(零)、-1(負(fù)數(shù))
np.ceil() #計(jì)算各元素的ceiling值,即大于等于該值的最小整數(shù)
np.floor() #計(jì)算各元素的floor值,即小于等于該值的最大整數(shù)
np.rint() #將各元素值四舍五入到最接近的整數(shù),保留dtype
np.modf() #將數(shù)組的小數(shù)和整數(shù)部分以兩個(gè)獨(dú)立數(shù)組的形式返回
np.isnan() #返回一個(gè)表示“哪些值是NaN(這不是一個(gè)數(shù)字)”的布爾數(shù)組
np.isfinite()、np.isinf() #分布返回一個(gè)表示“哪些元素是有窮的(非inf,非NaN)”或“哪些元素是無(wú)窮的”的布爾型數(shù)組
np.cos()、np.cosh()、np.sin()、np.sinh() #普通型和雙曲型三角函數(shù)
np.tan()、np.tanh()、np.arcos()、np.arccosh()、np.arcsin()、np.arcsinh()、np.arctan()、np.arctanh() #反三角函數(shù)
np.logical_not() #計(jì)算各元素not x 的真值。相當(dāng)于-arr
二元ufunc
np.add(arr1,arr2) #將數(shù)組中對(duì)應(yīng)的元素相加
np.subtract() #從第一個(gè)數(shù)組中減去第二個(gè)數(shù)組中的元素
np.multiply() #數(shù)組對(duì)應(yīng)元素相乘
np.divide()、np.floor_divide() #除法或向下圓整除法(丟棄余數(shù))
np.power() #對(duì)第一個(gè)數(shù)組中的元素A,根據(jù)第二個(gè)數(shù)組中的相應(yīng)元素B,計(jì)算
np.maximum()、np.fmax() #元素級(jí)的最大值計(jì)算。fmax將忽略NaN
np.minimum()、np.fmin() #元素級(jí)的最小值計(jì)算。fmin將忽略NaN
np.mod() #元素級(jí)的求模運(yùn)算(除法的余數(shù))
np.copysign() #將第二個(gè)數(shù)組中的值的符合復(fù)制給第一個(gè)數(shù)組中的值
np.greater()、np.greater_equal()、np.less()、np.less_equal()、np.logical_and()、np.logical_or()、np.logical_xor() #執(zhí)行元素級(jí)的比較運(yùn)算,最終產(chǎn)生布爾型數(shù)組,相當(dāng)于>、>=、<、<=、==、!=
#當(dāng)c為T(mén)rue,取x;當(dāng)c為False,取y>>>x = np.array([1.1,1.2,1.3, 1.4, 1.5])>>>y = np.array([2.1, 2.2, 2.3, 2.4, 2.5])>>>c = np.array([True, False, True, True, False])>>>result = np.where(c, x, y)array([1.1, 2.2, 1.3, 1.4, 2.5])
where通常用于根據(jù)另一個(gè)數(shù)組而產(chǎn)生一個(gè)新的數(shù)組。
傳遞給where的數(shù)組大小可以不相等,甚至可以是標(biāo)量值。
數(shù)學(xué)和統(tǒng)計(jì)方法
獲取正態(tài)分布的函數(shù):np.random.randn(行數(shù),列數(shù)),參數(shù)只有一個(gè)時(shí),生成的是一維數(shù)組。
基本數(shù)組統(tǒng)計(jì)方法
>>>arr = np.arange(9).reshape((3,3))>>>arrarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
arr.sum() #對(duì)數(shù)組中全部或某軸向的元素求和。零長(zhǎng)度的數(shù)組的sum為0
arr.mean() #算術(shù)平均數(shù)。零長(zhǎng)度的數(shù)組的mean為NaN
arr.std()、arr.var() #分別為標(biāo)準(zhǔn)差和方差,自由度可調(diào)(默認(rèn)為n)
arr.min()、arr.max() #最大值和最小值
arr.argmin()、arr.argmax() #分別為最大和最小元素的索引
arr.cumsum() #所有元素的累積和
arr.cumprod() #所有元素的累積積
在上面這些方法中,布爾值會(huì)被強(qiáng)制轉(zhuǎn)換為1(True)和0(False)
>>>(arr > 0).sum() #正數(shù)的數(shù)量>>>8
arr.any()、arr.all() #它們對(duì)布爾數(shù)組非常有用。any用于測(cè)試數(shù)組中是否存在一個(gè)或多個(gè)True,而all則檢查數(shù)組中所有值是否都是True
>>>arr = np.array([False, False, True, False])>>>arr.any()True>>>arr.all()False
排序
arr.sort() #同Python內(nèi)置的列表類(lèi)型一樣
唯一化及其他的集合邏輯
np.unique(數(shù)組名) #用于找出數(shù)組中的唯一值并返回已排序的結(jié)果
>>>names = np.array(['Bob','Joe', 'Will', 'Bob','Joe', 'Will', 'Joe])>>>np.unique(names)array(['Bob','Joe','Will'])#該方法和set有些類(lèi)似
>>>arr = np.arange(10)>>>np.save('an_array', arr) #將arr保存到磁盤(pán)。如果文件路徑末尾沒(méi)有擴(kuò)展名.npy,則該擴(kuò)展名會(huì)被自動(dòng)加上>>>np.load('an_array.npy') #讀取磁盤(pán)數(shù)組
>>>np.savez('array.npz', a = arr, b = arr)>>>m = np.load('array.npz')>>>m['a']array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
pandas
中的read_csv
和read_table
。有時(shí)也需要np.loadtxt
或np.genfromtxt
將數(shù)據(jù)加載到普通的NumPy數(shù)組中。>>>arr = np.loadtxt('array.txt', delimiter = ',')#np.savetxt() 執(zhí)行的是相反的操作:將數(shù)組寫(xiě)到以某種分隔符隔開(kāi)的文本文件中。genfromtxt跟loadtxt差不多,只不過(guò)它面向的是結(jié)構(gòu)化數(shù)組和缺失數(shù)據(jù)處理。
NumPy中的矩陣乘法函數(shù):np.dot(x,y)
>>>a = np.random.randn(3,3)>>>b = np.random.randn(3,4)>>>aarray([[ 0.79424789, 2.13225629], [ 0.56193264, 0.28040479]])>>>barray([[ 2.77264694, -0.76840806, -0.92406786], [ 0.99918608, 0.33742714, 1.04551225]])>>>np.dot(a,b)array([[ 4.33268977, 0.10917466, 1.49536114], [ 1.83821738, -0.33717739, -0.22609725]])
np.diag(arr)
#以一維數(shù)組的形式返回方陣的對(duì)角線(或非對(duì)角線)元素,或?qū)⒁痪S數(shù)組轉(zhuǎn)換為方陣(非對(duì)角線元素為0) np.dot(x,y)
#矩陣乘法 np.trace()
#計(jì)算對(duì)角線元素的和 np.linalg.det()
#計(jì)算矩陣行列式 np.linalg.eig()
#計(jì)算方陣的本特征和本特征向量 np.linalg.inv()
#計(jì)算方陣的逆 np.linalg.pinv()
#計(jì)算方陣的Moore-Penrose偽逆 np.linalg.qr()
#計(jì)算QR分解 np.linalg.svd()
#計(jì)算奇異值分解 np.linalg.solve(A,b)
#解線性方程組Ax=b,其中A為一個(gè)方陣 np.linalg.lstsq()
#計(jì)算Ax=b的最小二乘解numpy.random
模塊對(duì)python內(nèi)置的random進(jìn)行了補(bǔ)充,增加了一些用于高效生成多種概率分布的樣本值的函數(shù)。
>>>a = np.random.normal((size=(3,3)) #用size=(行數(shù),列數(shù)),生成數(shù)組,不用size,僅生成一個(gè)值,其他函數(shù)也是如此>>>aarray([[-0.96685449, 0.08163984, -0.22994784], [-0.64561687, 0.77092965, 0.69356818], [ 0.76825463, -1.68469753, 2.07854679]])
np.random.seed()
#確定隨機(jī)數(shù)生成器的種子 np.random.permutation()
#返回一個(gè)序列的隨機(jī)排列或返回一個(gè)隨機(jī)排列的范圍 np.random.shuffle()
#對(duì)一個(gè)序列就地隨機(jī)排列 np.random.rand()
#產(chǎn)生均勻分布的樣本值 np.random.randint()
#從給定的上下限范圍內(nèi)隨機(jī)選取整數(shù) np.random.randn()
#產(chǎn)生正態(tài)分布(平均值為0,標(biāo)準(zhǔn)差為1)的樣本值,類(lèi)似于Matlab接口 np.random.binomial()
#產(chǎn)生二項(xiàng)分布的樣本值 np.random.normal()
#產(chǎn)生正態(tài)(高斯)分布的樣本值 np.random.beta()
#產(chǎn)生Beta分布的樣本值 np.random.chisquare()
#產(chǎn)生卡方分布的樣本值 np.random.gamma()
#產(chǎn)生Gamma分布的樣本值 np.random.uniform()
#產(chǎn)生在(0,1)中均勻分布的樣本值pandas是基于NumPy構(gòu)建的,讓以NumPy為中心的應(yīng)用變得更加簡(jiǎn)單。
引入pandas方式:
from pandas import Series, DataFrameimport pandas as pd
>>>obj = Series([4,7,-5,3])>>>obj0 41 72 -53 3#通過(guò)values、index指定屬性獲取其數(shù)組表示形式和索引對(duì)象>>>obj.valuesarray([4,7,-5,3])>>>obj.indexInt64Index([0,1,2,3])
>>>obj2 = Series([4,5,6,7],index = ['d','b','a','c']) #添加索引值, 索引可以通過(guò)賦值的方式就地修改obj2.index={}>>>obj2d 4b 5a 6c 7dtype: int64>>>obj2['a'] #索引6>>>obj2[['a','b']] #索引a 6b 5
>>>dict = {'a':2,'b':3,'c':4}>>>obj3 = Series(dict)>>>obj3a 2b 3c 4
如果只傳入一個(gè)字典,則結(jié)果Series中的索引就是原字典的鍵。
pd.isnull()、pd.notnull()
可用于檢測(cè)缺失數(shù)據(jù)>>>pd.isnull(obj3) #也可以用obj3.isnull()a Falseb Falsec False>>>pd.notnull(obj3)a Trueb Truec True
>>>data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]} #字典>>>frame = DataFrame(data)>>>frame pop state year0 1.5 Ohio 20001 1.7 Ohio 20012 3.6 Ohio 20023 2.4 Nevada 20014 2.9 Nevada 2002#結(jié)果DataFrame會(huì)自動(dòng)加上索引(跟Series一樣),且全部列會(huì)被有序排列#如果指定了列序列,則按指定的列排列(如果傳入的列找不到,就會(huì)產(chǎn)生NaN值)>>>DataFrame(data, columns = ['year','state','pop'] year state pop0 2000 Ohio 1.51 2001 Ohio 1.72 2002 Ohio 3.63 2001 Nevada 2.44 2002 Nevada 2.9#索引(DataFrame添加指定索引的方式同Series相同,參考3.1)>>>frame.year0 20001 20012 20023 20014 2002Name: year, dtype: int64#按行索引frame.ix[索引名或行列]>>>frame.ix[2]pop 3.6state Ohioyear 2002Name: 2, dtype: object#如果設(shè)置了DataFrame的index和columns的name屬性,則這些信息也會(huì)被顯示出來(lái)>>>frame.index.name = 'xuhao';frame.columns.name = 'state'state pop state yearxuhao 0 1.5 Ohio 20001 1.7 Ohio 20012 3.6 Ohio 20023 2.4 Nevada 20014 2.9 Nevada 2002
列可以通過(guò)賦值的方式進(jìn)行修改。
將列表或數(shù)組賦值給某個(gè)列時(shí),其長(zhǎng)度必須跟DataFrame的長(zhǎng)度相匹配。如果賦值的是一個(gè)Series,就會(huì)精確匹配DataFrame的索引,所有的空位都講被填上缺失值。
二維ndarray
#數(shù)據(jù)矩陣,還可以傳入行標(biāo)和列標(biāo) 由數(shù)組、列標(biāo)或元組組成的字典
#每個(gè)序列會(huì)變成DataFrame的一列。所有序列的長(zhǎng)度必須相同 NumPy的結(jié)構(gòu)化/記錄數(shù)組
#類(lèi)似于“由數(shù)組組成的字典” 由Series組成的字典
#每個(gè)Series會(huì)成為一列。如果沒(méi)有顯式指定索引,則各Series的索引會(huì)被合并成結(jié)果的行索引 由字典組成的字典
#各內(nèi)層字典會(huì)成為一列。鍵會(huì)被合并成結(jié)果的行索引,跟“由Series組成的字典”的情況一樣 字典或Series的列表
#各項(xiàng)將會(huì)成為DataFrame的一行。字典鍵或Series索引的并集將會(huì)成為DataFrame的列標(biāo) 由列表或元組組成的列表
#類(lèi)似于“二維ndarray” 另一個(gè)DataFrame
#該DataFrame的索引將會(huì)被沿用,除非顯式指定了其他索引 NumPy的MaskedArray
#類(lèi)似于“二維ndarray”的情況,只是掩碼值在結(jié)果DataFrame會(huì)變成NaN缺失值>>>obj = Series(range(3), index = ['a','b','c'])>>>index = obj.indexIndex([u'a', u'b', u'c'], dtype='object')
pandas中主要的index對(duì)象 index()
#最泛化的index對(duì)象,將軸標(biāo)簽標(biāo)示為一個(gè)由Python對(duì)象組成的NumPy數(shù)組 int64index()
#針對(duì)整數(shù)的特殊index Multiindex()
#“層次化”索引對(duì)象,標(biāo)示單個(gè)軸上的多層索引??梢钥醋鲇稍M組成的數(shù)組 datetimeindex()
#存儲(chǔ)納秒級(jí)時(shí)間戳(用NumPy的datetime64類(lèi)型標(biāo)示) periodindex()
#針對(duì)period數(shù)據(jù)(時(shí)間間隔)的特殊index
index的方法和屬性 append()
#連接另一個(gè)index對(duì)象,產(chǎn)生一個(gè)新的index diff()
#計(jì)算差集,并得到一個(gè)index intersection()
#計(jì)算交集 union()
#計(jì)算并集 isin()
#計(jì)算一個(gè)指示各值是否都包含在參數(shù)集合中的布爾型數(shù)組 delete()
#刪除索引i處的元素,并得到新的index drop()
#刪除傳入的值,并得到新的index insert()
#將元素插入到索引i處,并得到新的index is_moontonic()
#當(dāng)各元素均大于等于前一個(gè)元素時(shí),返回True is_quique()
#當(dāng)index沒(méi)有重復(fù)值時(shí),返回True unique()
#計(jì)算index中唯一值的數(shù)組
>>>obj = Series(range(3), index = ['a','b','c'])>>>obj2 = obj.reindex(['a','b','c','d']) #調(diào)用該Series的reindex將會(huì)根據(jù)新新索引進(jìn)行重排,如果某個(gè)索引值當(dāng)前不存在,就引入缺失值>>>obj2a 0.0b 1.0c 2.0d NaNdtype: float64
>>>obj3 = Series(['blue','purple','yellow'],index=[0,2,4])>>>obj3.reindex(range(6),method = 'ffill') #對(duì)于時(shí)間序列這樣的有序數(shù)據(jù),重新索引時(shí)可能需要做一些插值處理。method選項(xiàng)即可達(dá)到此目的。0 blue1 blue2 purple3 purple4 yellow5 yellowdtype: object
ffill或pad
#前向填充(或搬運(yùn))值 bfill或backfill
#后向填充(或搬運(yùn))值>>>frame = DataFrame(np.arange(9).reshape((3,3)),index = ['a','c','d'], columns = ['Oo','Tt','Cc'])>>>frame Oo Tt Cca 0 1 2c 3 4 5d 6 7 8>>>frame2 = frame.reindex(['a','b','c','d']) #對(duì)于DataFrame,reindex可以修改(行)索引、列,或兩個(gè)都修改。如果僅傳入一個(gè)序列,則會(huì)重新索引行 Oo Tt Cca 0.0 1.0 2.0b NaN NaN NaNc 3.0 4.0 5.0d 6.0 7.0 8.0#使用columns關(guān)鍵字即可重新索引列>>>states = ['Tt','Uu','Cc']>>>frame.reindex(columns = states) Tt Uu Cca 1 NaN 2c 4 NaN 5d 7 NaN 8#同時(shí)對(duì)行和列進(jìn)行重新索引,而插值則只能按行應(yīng)用(即軸0)>>>frame.reindex(index=['a','b','c','d'],method='ffill',columns=states) Tt Uu Cca 1 NaN 2b 1 NaN 2c 4 NaN 5d 7 NaN 8#利用ix的標(biāo)簽索引功能,重新索引任務(wù)可以變得更簡(jiǎn)潔>>>frame.ix[['a','b','c','d'],states] Tt Uu Cca 1.0 NaN 2.0b NaN NaN NaNc 4.0 NaN 5.0d 7.0 NaN 8.0
index
用作索引的新序列。既可以是index序列,也可以是其他序列型的Python數(shù)據(jù)結(jié)構(gòu)。index會(huì)被完全使用,就像沒(méi)有任何復(fù)制一樣 method
#插值(填充)方式 fill_value
#在重新索引的過(guò)程中,需要引入缺失值時(shí)使用的替代值 limit
#前向或后向填充時(shí)最大填充量 level
#在Multiindex的指定級(jí)別上匹配簡(jiǎn)單索引,否則選取其子集 copy
#默認(rèn)為T(mén)rue,無(wú)論如何都復(fù)制;如果為False,則新舊相等就不復(fù)制丟棄某條軸上的一個(gè)或多個(gè)項(xiàng)很簡(jiǎn)單,只要有一個(gè)索引數(shù)組或列表即可。由于需要執(zhí)行一些數(shù)據(jù)整理和集合邏輯,所以drop方法返回的是一個(gè)在指定軸上刪除了指定值的新對(duì)象
>>>obj = Series(np.arange(5),index = ['a','b','c','d','e'])>>>obja 0b 1c 2d 3e 4dtype: int32>>>new_obj = obj.drop('c')a 0b 1d 3e 4dtype: int32
>>>obj = Series(np.arange(5),index = ['a','b','c','d','e'])>>>obja 0b 1c 2d 3e 4dtype: int32>>>obj['b]1.0>>>obj['a','b']a 0b 1>>>obj[2:4] #切片c 2d 3>>>obj[obj<2]a 0b 1>>>obj['b':'c']b 1c 2>>>obj < 4 #布爾型索引a Trueb Truec Trued Truee Falsedtype: bool#字段ix索引>>>frame Oo Tt Cca 0 1 2c 3 4 5d 6 7 8>>>frame.ix[['a','c'],['Cc','Oo']] Cc Ooa 2 0c 5 3>>>frame.ix[['a','c'],[1,2]] Tt Cca 1 2c 4 5
obj[val]
#選取DataFrame的單個(gè)或一組列。在一些特殊情況下會(huì)比較便利:布爾型數(shù)組(過(guò)濾行)、切片(行切片)、布爾型DataFrame(根據(jù)條件設(shè)置值) obj.ix[val]
#選取DataFrame的單個(gè)行或一組行 obj.ix[:,val]
#選取當(dāng)個(gè)列或列子集 obj.ix[val1,val2]
#同時(shí)選取行和列 reindex()
#將一個(gè)或多個(gè)軸匹配到新索引 xs
#根據(jù)標(biāo)簽選取單行或單列,并返回一個(gè)Series icol、irow
#根據(jù)整數(shù)位置選取單列或單行,并返回一個(gè)Series get_value、set_value
#根據(jù)行標(biāo)簽和列標(biāo)簽選取單個(gè)值>>>s1 = Series(np.arange(4),index = ['a','c','d','e'])>>>s2 = Series(np.arange(5),index = ['a','c','e','f','g'])>>>s1a 0c 1d 2e 3dtype: int32>>>s2a 0c 1e 2f 3g 4dtype: int32>>>s1 + s2 #自動(dòng)的數(shù)據(jù)對(duì)齊操作在不重疊的索引處引入了NaN值a 0.0c 2.0d NaNe 5.0f NaNg NaNdtype: float64
fill_value
#在對(duì)不同索引的對(duì)象進(jìn)行算術(shù)運(yùn)算時(shí),數(shù)據(jù)操作不重疊處填充一個(gè)特殊值。>>>s1.add(s2,fill_value=0)a 0.0c 2.0d 2.0e 5.0f 3.0g 4.0dtype: float64>>>s1.reindex(index = s2.index, fill_value = 0) #在對(duì)Series和DataFrame重新索引時(shí),也可以指定一個(gè)填充值a 0c 1e 3f 0g 0dtype: int32
s1.add(s2)
#用于加法的方法 s1.sub(s2)
#用于減法的方法 s1.div(s2)
#用于除法的方法 s1.mul(s2)
#用于乘法的方法#二維數(shù)組與某行之差>>>arr = np.arange(12.).reshape(3,4))>>>arrarray([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]])>>>arr[0]array([ 0., 1., 2., 3.])>>>arr - arr[0] #這就叫做廣播(broadcasting)array([[ 0., 0., 0., 0.], [ 4., 4., 4., 4.], [ 8., 8., 8., 8.]])
#DataFrame和Series之間是算術(shù)運(yùn)算將Series索引值默認(rèn)匹配到DataFrame的列,然后沿著行一直向下廣播>>>frame = DataFrame(np.arange(12.).reshape((4,3)),columns = list('bde'), index = ['Uu','Oo','Tt','Or'])>>>series = frame.ix[0]>>>frame b d eUu 0.0 1.0 2.0Oo 3.0 4.0 5.0Tt 6.0 7.0 8.0Or 9.0 10.0 11.0>>>seriesb 0.0d 1.0e 2.0Name: Uu, dtype: float64>>>frame - series #如果索引找不到,則為NaN b d eUu 0.0 0.0 0.0Oo 3.0 3.0 3.0Tt 6.0 6.0 6.0Or 9.0 9.0 9.0#行在列上廣播(即與每列做運(yùn)算),則需用算術(shù)運(yùn)算方法>>>series2 = frame['d']>>>series2Uu 0.0Oo 3.0Tt 6.0Or 9.0Name: b, dtype: float64>>>frame.sub(series2, axis=0) b d eUu 0.0 1.0 2.0Oo 0.0 1.0 2.0Tt 0.0 1.0 2.0Or 0.0 1.0 2.0
>>>frame = DataFrame(np.arange(12.).reshape((4,3)),columns = list('bde'), index = ['Uu','Oo','Tt','Or'])>>>frame b d eUu 0.0 1.0 2.0Oo 3.0 4.0 5.0Tt 6.0 7.0 8.0Or 9.0 10.0 11.0>>>np.abs(frame) #求絕對(duì)值 b d eUu 0.0 1.0 2.0Oo 3.0 4.0 5.0Tt 6.0 7.0 8.0Or 9.0 10.0 11.0>>>f = lambda x: x.max() - x.min()>>>frame.appply(f) #將函數(shù)應(yīng)用到各列所形成的一維數(shù)組,apply方法實(shí)現(xiàn)b 9.0d 9.0e 9.0dtype: float64>>>frame.apply(f,axis=1) #應(yīng)用到行Uu 2.0Oo 2.0Tt 2.0Or 2.0dtype: float64
obj.sort_index()
方法將返回一個(gè)已排序的新對(duì)象。>>>obj = Series(np.arange(5),index = ['e','c','a','d','b'])>>>obje 0c 1a 2d 3b 4dtype: int32>>>obj2 = obj.sort_index()>>>obj2a 2b 4c 1d 3e 0dtype: int32>>>obj2.sort_index(ascending = False) #降序e 0d 3c 1b 4a 2dtype: int32>>>obj2.order() #按值排序。排序時(shí),任何缺失值默認(rèn)都會(huì)被會(huì)放到Series的末尾。e 0c 1a 2d 3b 4dtype: int32
>>>frame = DataFrame(np.arange(12.).reshape((4,3)),columns = list('bde'), index = ['Uu','Oo','Tt','Or'])>>>frame b d eUu 0.0 1.0 2.0Oo 3.0 4.0 5.0Tt 6.0 7.0 8.0Or 9.0 10.0 11.0>>>frame.sort_index(by = 'b',ascending=False) #按'b'列降序 b d eOr 9.0 10.0 11.0Tt 6.0 7.0 8.0Oo 3.0 4.0 5.0Uu 0.0 1.0 2.0
>>>obj2 = Series([7,-5,7,4,2,0,4])>>>obj2.rank() #rank()是通過(guò)“為各組分配一個(gè)平均排名”的方式破壞平級(jí)關(guān)系的0 6.51 1.02 6.53 4.54 3.05 2.06 4.5dtype: float64>>>obj2.rank(method = 'first') #在原數(shù)據(jù)中出現(xiàn)的順序給出排名0 6.01 1.02 7.03 4.04 3.05 2.06 5.0dtype: float64
>>>obj = Series(np.arange(5),index = ['a','a','b','b','c'])a 0a 1b 2b 3c 4dtype: int32>>>obj.index.is_unique #查詢索引是否唯一False>>>obj['a'] #如果某個(gè)索引對(duì)應(yīng)多個(gè)值,則返回一個(gè)Series,對(duì)應(yīng)單個(gè)的,則返回一個(gè)標(biāo)量值a 0a 1>>>obj['c']4dtype: int32#對(duì)DataFrame的行進(jìn)行索引類(lèi)似Series
>>>frame = DataFrame([[1,np.nan],[3,-2],[np.nan,np.nan],[5,1]], index = ['a','b','c','d'], columns = ['one','two'])>>>frame one twoa 1.0 NaNb 3.0 -2.0c NaN NaNd 5.0 1.0>>>frame.sum()one 9.0two -1.0dtype: float64>>>frame.mean(axis=1,skipna=False) #axis=1是按列,skipna默認(rèn)為T(mén)rue,排除缺失值。skipan=False表示不排除缺失值a NaNb 0.5c NaNd 3.0dtype: float64
axis
#默認(rèn)=0按行,=1為按列 skipna
#排除缺失值,默認(rèn)為T(mén)rue level
#如果軸是層次化索引的(即multilindex),則根據(jù)level分組約簡(jiǎn)>>>frame.idxmax() #返回最大值的索引one dtwo ddtype: object
frame.count()
#非NA值的數(shù)量 frame.describe()
#針對(duì)Series或各DataFrame列計(jì)算匯總統(tǒng)計(jì) frame.min()、frame.max()
#計(jì)算最小值和最大值 frame.argmin()、frame.argmax()
#計(jì)算能夠獲取到最小值和最大值的索引位置(整數(shù)) frame.idxmin()、frame.idxmax()
#計(jì)算最大值和最小值的索引值 frame.quantile()
#計(jì)算樣本的分位數(shù)(0到1) frame.sum()
#值的總和 frame.mean()
#值的平均數(shù) frame.median()
#值的算術(shù)中位數(shù)(50%) frame.mad()
#根據(jù)平均值計(jì)算平均絕對(duì)離差 frame.var()
#樣本值的方差 frame.std()
#樣本值的標(biāo)準(zhǔn)差 frame.skew()
#樣本值的偏度(三階矩) frame.kurt()
#樣本值的峰度(四階矩) frame.cumsum()
#樣本值的累積和 frame.cummin()、frame.cummax()
#樣本值的累積最大值和累積最小值 frame.cumprod()
#樣本值的累積積 frame.diff()
#計(jì)算一階差分(對(duì)時(shí)間序列很有用) frame.pct_change()
#計(jì)算百分?jǐn)?shù)變化frame.corr() #相關(guān)系數(shù)
frame.cov() #協(xié)方差矩陣
>>>obj2 = Series(['c','a','d','a','a','b','b','c','c'])>>>uni = obj2.unique()>>>uniarray(['c', 'a', 'd', 'b'], dtype=object)>>>obj2.value_counts() #計(jì)算各個(gè)值出現(xiàn)的頻率,默認(rèn)降序排列c 3a 3b 2d 1dtype: int64
obj2.isin()
#計(jì)算一個(gè)表示“Series各值是否包含于傳入的值序列中”的布爾型數(shù)組 obj2.unique()
#計(jì)算Series中的唯一值數(shù)組,按發(fā)現(xiàn)的書(shū)序返回 obj2.value_counts()
#返回一個(gè)Series,其索引為唯一值,其值為頻率,按計(jì)數(shù)值降序排列>>>obj2 = Series(['c','a','d','a','a','b','b','c','c'])>>>obj2.isnull()0 False1 False2 False3 False4 False5 False6 False7 False8 Falsedtype: bool
NA處理方法 obj2.dropna()
#根據(jù)各標(biāo)簽的值中是否存在缺失數(shù)據(jù)對(duì)軸標(biāo)簽進(jìn)行過(guò)濾,可通過(guò)閾值調(diào)節(jié)對(duì)缺失值的容忍度(默認(rèn)丟棄任何含有缺失值的行) obj2.fillna()
#用指定值或插值方法(如ffill或bfill)填充缺失數(shù)據(jù) obj2.isnull()
#返回一個(gè)含有布爾值的對(duì)象,這些布爾值表示哪些值是缺失值NA,該對(duì)象的類(lèi)型與源類(lèi)型一樣 obj2.notnull()
#isnull的否定式
濾除缺失數(shù)據(jù)
>>>frame = DataFrame([[1,np.nan],[3,-2],[np.nan,np.nan],[5,1]], index = ['a','b','c','d'], columns = ['one','two'])>>>frame one twoa 1.0 NaNb 3.0 -2.0c NaN NaNd 5.0 1.0>>>frame2 = frame.dropna() #默認(rèn)丟棄全部缺失值的行 one twob 3.0 -2.0d 5.0 1.0>>>frame3 = frame.dropna(how = 'all') #丟棄全為NA的行,參數(shù)添加axis=1可按列丟棄 one twoa 1.0 NaNb 3.0 -2.0d 5.0 1.0
>>>frame = DataFrame([[1,np.nan],[3,-2],[np.nan,np.nan],[5,1]], index = ['a','b','c','d'], columns = ['one','two'])>>>frame one twoa 1.0 NaNb 3.0 -2.0c NaN NaNd 5.0 1.0>>>frame.fillna(0) one twoa 1.0 0.0b 3.0 -2.0c 0.0 0.0d 5.0 1.0
參考文獻(xiàn)《Python數(shù)據(jù)分析》
聯(lián)系客服