九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Python數(shù)據(jù)處理手冊(cè)

關(guān)鍵詞: Python


1、引言

numpy和pandas的常用函數(shù)及方法。

2、Numpy基礎(chǔ):數(shù)組和矢量計(jì)算

2.1 一種多維數(shù)組對(duì)象ndarray

2.2 運(yùn)算函數(shù)

  • 通用函數(shù)(即ufunc)是一種對(duì)ndarray中的數(shù)據(jù)執(zhí)行元素級(jí)運(yùn)算的函數(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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • np.modf() #分別顯示浮點(diǎn)整數(shù)的小數(shù)部分和整數(shù)部分
>>>np.modf(np.sqrt(arr))(array([ 0.        ,  0.        ,  0.41421356,  0.73205081]), array([ 0.,  1.,  1.,  1.]))
  • 1
  • 2
  • 3
  • 一元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ì)算AB
    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)于>、>=、<、<=、==、!=

2.3 利用數(shù)組進(jìn)行數(shù)據(jù)處理

  • np.where() #是三元表達(dá)式x if condition else y的矢量化版本。
#當(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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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]])
  • 1
  • 2
  • 3
  • 4
  • 5

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
  • 1
  • 2

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 排序
    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)似
  • 1
  • 2
  • 3
  • 4
  • 5
  • 數(shù)組的集合運(yùn)算
    np.unique(x) #計(jì)算x中的唯一元素,并返回有序結(jié)果
    np.intersect1d(x,y) #計(jì)算x和y中的公共元素,并返回有序結(jié)果
    np.union1d(x,y) #計(jì)算x和y的并集,并返回有序結(jié)果
    np.in1d(x,y) #得到一個(gè)表示“x的元素是否包含于y”的布爾型數(shù)組
    np.setdiff1d(x,y) #集合的差,即元素在x中且不在y中
    np.setxor1d(x,y) #集合的對(duì)稱差,即存在于一個(gè)數(shù)組中,但不同時(shí)存在于兩個(gè)數(shù)組中的元素

2.4 數(shù)組的文件輸入輸出

  • Numpy能夠讀寫(xiě)磁盤(pán)上的文本數(shù)據(jù)、二進(jìn)制數(shù)據(jù)。
  • 將數(shù)組以二進(jìn)制格式保存到磁盤(pán)。
  • np.save()、np.load()是讀寫(xiě)磁盤(pán)數(shù)組數(shù)據(jù)的兩個(gè)主要函數(shù)。默認(rèn)情況下,數(shù)組以未壓縮的原始二進(jìn)制格式保存在擴(kuò)展名為.npy的文件中。
>>>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ù)組
  • 1
  • 2
  • 3
  • np.savez() #可以將多個(gè)數(shù)組保存到一個(gè)壓縮文件中,將數(shù)組以關(guā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]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 存取文本文件
    從文件中加載文本是一個(gè)非常標(biāo)準(zhǔn)的任務(wù)。python中的文件讀寫(xiě)函數(shù)格式很容易將新手搞暈,所以主要介紹pandas中的read_csvread_table。有時(shí)也需要np.loadtxtnp.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ù)處理。
  • 1
  • 2
  • 3

2.5 線性代數(shù)

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]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 常用的numpy.linalg函數(shù)
    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的最小二乘解

2.6 隨機(jī)數(shù)生成

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]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • numpy.random函數(shù)
    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)中均勻分布的樣本值

3 pandas

pandas是基于NumPy構(gòu)建的,讓以NumPy為中心的應(yīng)用變得更加簡(jiǎn)單。
引入pandas方式:

from pandas import Series, DataFrameimport pandas as pd
  • 1
  • 2
  • 3
  • 4

3.1 Series

  • Series是一種類(lèi)似于一維數(shù)組的對(duì)象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類(lèi)型)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。
  • Series:索引在左,值在右邊
    僅由一組數(shù)據(jù)即可產(chǎn)生最簡(jiǎn)單的Series:
>>>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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • Series同樣可以使用標(biāo)量乘法、數(shù)學(xué)運(yùn)算函數(shù)
  • 如果數(shù)據(jù)別存放在一個(gè)python字典中,也可以直接通過(guò)這個(gè)字典來(lái)創(chuàng)建Series。
>>>dict = {'a':2,'b':3,'c':4}>>>obj3 = Series(dict)>>>obj3a  2b  3c  4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果只傳入一個(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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.2 DataFrame

  • DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值類(lèi)型(數(shù)值、字符串、布爾值等)
>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

列可以通過(guò)賦值的方式進(jìn)行修改。
將列表或數(shù)組賦值給某個(gè)列時(shí),其長(zhǎng)度必須跟DataFrame的長(zhǎng)度相匹配。如果賦值的是一個(gè)Series,就會(huì)精確匹配DataFrame的索引,所有的空位都講被填上缺失值。

  • DataFrame構(gòu)造器的數(shù)據(jù)
    二維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缺失值

3.3 索引對(duì)象

  • index()
>>>obj = Series(range(3), index = ['a','b','c'])>>>index = obj.indexIndex([u'a', u'b', u'c'], dtype='object')
  • 1
  • 2
  • 3
  • 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ù)組

3.4 重新索引

>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • reindex的(插值)method選項(xiàng)
    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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • reindex函數(shù)的參數(shù)
    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ù)制

3.5 丟棄指定軸上的項(xiàng)

丟棄某條軸上的一個(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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3.6 索引、選取和過(guò)濾

>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • DataFrame的索引選項(xiàng)
    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è)值

3.7 算術(shù)運(yùn)算和數(shù)據(jù)對(duì)齊

  • 對(duì)不同的索引的對(duì)象進(jìn)行算術(shù)運(yùn)算,在相加時(shí),如果存在不同的索引對(duì),則結(jié)果的索引就是該索引對(duì)的并集。
>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 算術(shù)方法
    s1.add(s2) #用于加法的方法
    s1.sub(s2) #用于減法的方法
    s1.div(s2) #用于除法的方法
    s1.mul(s2) #用于乘法的方法

3.8 DataFrame和Series之間的運(yùn)算

#二維數(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.]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
#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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

3.9 函數(shù)應(yīng)用和映射

  • NumPy的ufunc(元素級(jí)數(shù)組方法)也可用于操作pandas對(duì)象。
>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

3.10 排序和排名

  • 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 在DataFrame上,將一個(gè)或多個(gè)列的名字傳遞給by,即可對(duì)相應(yīng)的列排序
>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 排名
    排名(ranking)跟排序關(guān)系密切,它會(huì)增設(shè)一個(gè)排名值(從1開(kāi)始,一直到數(shù)組中有效數(shù)據(jù)的數(shù)量)。它跟numpy.argsort產(chǎn)生的間接排序索引差不多,只不過(guò)它可以根據(jù)某種規(guī)則破壞平級(jí)關(guān)系。
>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 排名時(shí)用于破壞平級(jí)關(guān)系的method選項(xiàng)
    method = ‘a(chǎn)verage’ #默認(rèn):在相等分組中,為各個(gè)值分配平均排名
    method = ‘min’ #使用整個(gè)分組的最小排名
    method = ‘max’ #使用整個(gè)分組的最大排名
    method = ‘first’ #按值在原始數(shù)據(jù)中的出現(xiàn)順序分配排名

3.11 帶有重復(fù)值的軸索引

  • 索引值對(duì)應(yīng)多個(gè)值
>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.12 匯總和計(jì)算描述統(tǒng)計(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>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 約簡(jiǎn)方法的選項(xiàng)
    axis #默認(rèn)=0按行,=1為按列
    skipna #排除缺失值,默認(rèn)為T(mén)rue
    level #如果軸是層次化索引的(即multilindex),則根據(jù)level分組約簡(jiǎn)
>>>frame.idxmax()  #返回最大值的索引one    dtwo    ddtype: object
  • 1
  • 2
  • 3
  • 4
  • 描述和匯總統(tǒng)計(jì)
    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ù)變化

3.13 相關(guān)系數(shù)與協(xié)方差

frame.corr() #相關(guān)系數(shù)
frame.cov() #協(xié)方差矩陣

3.14 唯一值、值計(jì)數(shù)以及成員資格

>>>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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 唯一值、值計(jì)數(shù)、成員資格方法
    obj2.isin() #計(jì)算一個(gè)表示“Series各值是否包含于傳入的值序列中”的布爾型數(shù)組
    obj2.unique() #計(jì)算Series中的唯一值數(shù)組,按發(fā)現(xiàn)的書(shū)序返回
    obj2.value_counts() #返回一個(gè)Series,其索引為唯一值,其值為頻率,按計(jì)數(shù)值降序排列

3.15 處理缺失數(shù)據(jù)

>>>obj2 = Series(['c','a','d','a','a','b','b','c','c'])>>>obj2.isnull()0    False1    False2    False3    False4    False5    False6    False7    False8    Falsedtype: bool
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 填充缺失數(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>>>frame.fillna(0)   one  twoa  1.0  0.0b  3.0 -2.0c  0.0  0.0d  5.0  1.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

參考文獻(xiàn)《Python數(shù)據(jù)分析》

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
pandas小記:pandas索引和選擇
python之pandas用法詳解
《Python程序設(shè)計(jì)》第8章 數(shù)據(jù)分析和可視化
利用Python進(jìn)行數(shù)據(jù)分析
2. pandas入門(mén)
pandas中的兩種數(shù)據(jù)類(lèi)型Series和DataFrame區(qū)別
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服