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

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

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

開(kāi)通VIP
《利用python進(jìn)行數(shù)據(jù)分析》讀書(shū)筆記

pandas是本書(shū)后續(xù)內(nèi)容的首選庫(kù)。pandas可以滿足以下需求:

  • 具備按軸自動(dòng)或顯式數(shù)據(jù)對(duì)齊功能的數(shù)據(jù)結(jié)構(gòu)。這可以防止許多由于數(shù)據(jù)未對(duì)齊以及來(lái)自不同數(shù)據(jù)源(索引方式不同)的數(shù)據(jù)而導(dǎo)致的常見(jiàn)錯(cuò)誤。.
  • 集成時(shí)間序列功能
  • 既能處理時(shí)間序列數(shù)據(jù)也能處理非時(shí)間序列數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)
  • 數(shù)學(xué)運(yùn)算和簡(jiǎn)約(比如對(duì)某個(gè)軸求和)可以根據(jù)不同的元數(shù)據(jù)(軸編號(hào))執(zhí)行
  • 靈活處理缺失數(shù)據(jù)
  • 合并及其他出現(xiàn)在常見(jiàn)數(shù)據(jù)庫(kù)(例如基于SQL的)中的關(guān)系型運(yùn)算

1、pandas數(shù)據(jù)結(jié)構(gòu)介紹

兩個(gè)數(shù)據(jù)結(jié)構(gòu):Series和DataFrame。Series是一種類(lèi)似于以為NumPy數(shù)組的對(duì)象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類(lèi)型)和與之相關(guān)的一組數(shù)據(jù)標(biāo)簽(即索引)組成的??梢杂胕ndex和values分別規(guī)定索引和值。如果不規(guī)定索引,會(huì)自動(dòng)創(chuàng)建 0 到 N-1 索引。

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#Series可以設(shè)置index,有點(diǎn)像字典,用index索引obj = Series([1,2,3],index=['a','b','c'])#print obj['a']#也就是說(shuō),可以用字典直接創(chuàng)建Seriesdic = dict(key = ['a','b','c'],value = [1,2,3])dic = Series(dic)#下面注意可以利用一個(gè)字符串更新鍵值key1 = ['a','b','c','d']#注意下面的語(yǔ)句可以將 Series 對(duì)象中的值提取出來(lái),不過(guò)要知道的字典是不能這么做提取的dic1 = Series(obj,index = key1)#print dic#print dic1#isnull 和  notnull 是用來(lái)檢測(cè)缺失數(shù)據(jù)#print pd.isnull(dic1)#Series很重要的功能就是按照鍵值自動(dòng)對(duì)齊功能dic2 = Series([10,20,30,40],index = ['a','b','c','e'])#print dic1 + dic2#name屬性,可以起名字dic1.name = 's1'dic1.index.name = 'key1'#Series 的索引可以就地修改dic1.index = ['x','y','z','w']

DataFrame是一種表格型結(jié)構(gòu),含有一組有序的列,每一列可以是不同的數(shù)據(jù)類(lèi)型。既有行索引,又有列索引,可以被看做由Series組成的字典(使用共同的索引)。跟其他類(lèi)似的數(shù)據(jù)結(jié)構(gòu)(比如R中的data.frame),DataFrame面向行和列的操作基本是平衡的。其實(shí),DataFrame中的數(shù)據(jù)是以一個(gè)或者多個(gè)二維塊存放的(不是列表、字典或者其他)

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#構(gòu)建DataFrame可以直接傳入等長(zhǎng)的列表或Series組成的字典#不等長(zhǎng)會(huì)產(chǎn)生錯(cuò)誤data = {'a':[1,2,3],        'c':[4,5,6],        'b':[7,8,9]}#注意是按照列的名字進(jìn)行列排序frame = DataFrame(data)#print frame#指定列之后就會(huì)按照指定的進(jìn)行排序frame = DataFrame(data,columns=['a','c','b'])print frame#可以有空列,index是說(shuō)行名frame1 = DataFrame(data,columns = ['a','b','c','d'],index = ['one','two','three'])print frame1#用字典方式取列數(shù)據(jù)print frame['a']print frame.b#列數(shù)據(jù)的修改直接選出來(lái)重新賦值即可#行,可以用行名或者行數(shù)來(lái)進(jìn)行選取print frame1.ix['two']#為列賦值,如果是Series,規(guī)定了index后可以精確賦值frame1['d'] = Series([100,200,300],index = ['two','one','three'])print frame1#刪除列用del 函數(shù)del frame1['d']#警告:通過(guò)列名選出來(lái)的是Series的視圖,并不是副本,可用Series copy方法得到副本

另一種常見(jiàn)的結(jié)構(gòu)是嵌套字典,即字典的字典,這樣的結(jié)構(gòu)會(huì)默認(rèn)為外鍵為列,內(nèi)列為行。

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#內(nèi)層字典的鍵值會(huì)被合并、排序以形成最終的索引pop = {'Nevada':{2001:2.4,2002:2.9},       'Ohio':{2000:1.5,2001:1.7,2002:3.6}}frame3 = DataFrame(pop)#rint frame3#Dataframe也有行和列有name屬性,DataFrame有value屬性frame3.index.name = 'year'frame3.columns.name = 'state'print frame3print frame3.values

下面列出了DataFrame構(gòu)造函數(shù)能夠接受的各種數(shù)據(jù)。

索引對(duì)象

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#pandas索引對(duì)象負(fù)責(zé)管理軸標(biāo)簽和其他元數(shù)據(jù),構(gòu)建Series和DataFrame時(shí),所用到的任何數(shù)組或其他序列的標(biāo)簽都被轉(zhuǎn)換為Indexobj = Series(range(3),index = ['a','b','c'])index = obj.index#print index#索引對(duì)象是無(wú)法修改的,這非常重要,因?yàn)檫@樣才會(huì)使得Index對(duì)象在多個(gè)數(shù)據(jù)結(jié)構(gòu)之間安全共享index1 = pd.Index(np.arange(3))obj2 = Series([1.5,-2.5,0],index = index1)print obj2.index is index1#除了長(zhǎng)得像數(shù)組,Index的功能也類(lèi)似一個(gè)固定大小的集合print 'Ohio' in frame3.columnsprint 2003 in frame3.index

pandas中的Index是一個(gè)類(lèi),pandas中主要的Index對(duì)象(什么時(shí)候用到)。

下面是Index的方法與屬性,值得注意的是:index并不是數(shù)組。

2、基本功能

下面介紹基本的Series 和 DataFrame 數(shù)據(jù)處理手段。首先是索引:

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#Series有一個(gè)reindex函數(shù),可以將索引重排,以致元素順序發(fā)生變化obj = Series([1,2,3,4],index=['a','b','c','d'])#注意這里的reindex并不改變obj的值,得到的是一個(gè)“副本”#fill_value 顯然是填充空的index的值#print obj.reindex(['a','c','d','b','e'],fill_value = 0)#print objobj2 = Series(['red','blue'],index=[0,4])#method = ffill,意味著前向值填充obj3 = obj2.reindex(range(6),method='ffill')#print obj3#DataFrame 的reindex可以修改行、列或者兩個(gè)都改frame = DataFrame(np.arange(9).reshape((3,3)),index = ['a','c','d'],columns = ['Ohio','Texas','California'])#只是傳入一列數(shù),是對(duì)行進(jìn)行reindex,因?yàn)?..frame的行參數(shù)叫index...(我這么猜的)frame2 = frame.reindex(['a','b','c','d'])#print frame2#當(dāng)傳入原來(lái)沒(méi)有的index是,當(dāng)然返回的是空NaN#frame3 = frame.reindex(['e'])#print frame3states = ['Texas','Utah','California']#這是對(duì)行、列重排#注意:這里的method是對(duì)index 也就是行進(jìn)行的填充,列是不能填充的(不管method的位置如何)frame4 = frame.reindex(index = ['a','b','c','d'],columns=states,method = 'ffill')#print frame4#使用ix的標(biāo)簽索引功能,重新索引變得比較簡(jiǎn)潔print frame.ix[['a','d','c','b'],states]

關(guān)于ix,是DataFrame的一個(gè)方法,http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.ix.html

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

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#drop函數(shù)可以丟棄軸上的列、行值obj = Series(np.arange(3.),index = ['a','b','c'])#原Series并不丟棄obj.drop('b')#print obj#注意下面,行可以隨意丟棄,列需要加axis = 1print frame.drop(['a'])print frame.drop(['Ohio'],axis = 1)

下面說(shuō)索引、選取和過(guò)濾

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrameobj = Series([1,2,3,4],index=['a','b','c','d'])frame = DataFrame(np.arange(9).reshape((3,3)),index = ['a','c','d'],columns = ['Ohio','Texas','California'])#Series切片和索引#print obj[obj < 2]#注意:利用標(biāo)簽的切片與python的切片不同,兩端都是包含的(有道理)print obj['b':'c']#對(duì)于DataFrame,列可以直接用名稱(chēng)print frame['Ohio']#特殊情況:通過(guò)切片和bool型索引,得到的是行(有道理)print frame[:2]print frame[frame['Ohio'] != 0]#下面的方式是對(duì)frame所有元素都適用,不是行或者列,下面的得到的是numpy.ndarray類(lèi)型的數(shù)據(jù)print frame[frame < 5],type(frame[frame < 5])frame[frame < 5] = 0print frame#對(duì)于DataFrame上的標(biāo)簽索引,用ix進(jìn)行print frame.ix[['a','d'],['Ohio','Texas']]print frame.ix[2] #注意這里默認(rèn)取行#注意下面默認(rèn)取行print frame.ix[frame.Ohio > 0]#注意下面的逗號(hào)后面是列標(biāo)print frame.ix[frame.Ohio > 0,:2]

下面是常用的索引選項(xiàng):

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

#pandas 有一個(gè)重要的功能就是能夠根據(jù)索引自動(dòng)對(duì)齊,其中索引不重合的部分值為NaNs1 = Series([1,2,3],['a','b','c'])s2 = Series([4,5,6],['b','c','d'])#print s1 + s2df1 = DataFrame(np.arange(12.).reshape(3,4),columns=list('abcd'))df2 = DataFrame(np.arange(20.).reshape(4,5),columns=list('abcde'))#print df1 + df2#使用add方法,并傳入填充值,注意下面的fill_value函數(shù)是先對(duì)應(yīng)填充再進(jìn)行加和,而不是加和得到NaN之后再填充#print df1.add(df2,fill_value = 1000)#df1.reindex(columns = df2.columns,fill_value=0)

除了add之外,還有其他的方法:

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

#下面看一下DataFrame和Series之間的計(jì)算過(guò)程arr = DataFrame(np.arange(12.).reshape((3,4)),columns = list('abcd'))#下面的結(jié)果標(biāo)明,就是按行分別相減即可,叫做 broadcasting#注意:默認(rèn)情況下,DataFrame和Series的計(jì)算會(huì)將Series的索引匹配到DataFrame的列,然后進(jìn)行計(jì)算,再沿著行一直向下廣播#注意:下面的式子中,如果寫(xiě)arr - arr[0]是錯(cuò)的,因?yàn)橹挥袠?biāo)簽索引函數(shù)ix后面加數(shù)字才表示行print arr - arr.ix[0]Series2 = Series(range(3),index = list('cdf'))#按照規(guī)則,在不匹配的列會(huì)形成NaN值print arr + Series2#如果想匹配行且在列上廣播,需要用到算術(shù)運(yùn)算方法Series3 = arr['d']#axis就是希望匹配的軸print arr.sub(Series3,axis = 0)

下面是函數(shù)應(yīng)用和映射

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#NumPy的元素級(jí)數(shù)組方法也適用于pandas對(duì)象frame = DataFrame(np.random.randn(4,3),columns = list('abc'),index = ['Ut','Oh','Te','Or'])print frame#下面是求絕對(duì)值:#print np.abs(frame)#另一種常見(jiàn)的做法是:將一個(gè)函數(shù)應(yīng)用到行或者列上,用apply方法,與R語(yǔ)言類(lèi)似fun = lambda x:x.max() - x.min()#默認(rèn)是應(yīng)用在每一列上print frame.apply(fun)#下面是應(yīng)用在列上print frame.apply(fun,axis = 1)#很多統(tǒng)計(jì)函數(shù)根本不用apply,直接調(diào)用方法就可以了print frame.sum()#除了標(biāo)量值之外,apply函數(shù)后面還可以接返回多個(gè)值組成的的Series的函數(shù),有沒(méi)有很漂亮?def f(x):    return Series([x.min(),x.max()],index = ['min','max'])#print frame.apply(f)#元素級(jí)的python函數(shù)也是可以用的,但是要使用applymap函數(shù)format = lambda x: '%.2f' % xprint frame.applymap(format)#之所以要用applymap是因?yàn)镾eries有一個(gè)應(yīng)用于元素級(jí)函數(shù)的map方法??#這里的map很有用print frame['b'].map(format)

排序與排名

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#用sort_index函數(shù)對(duì)行、列的索引進(jìn)行排序obj = Series(range(4),index = ['d','a','b','c'])print obj.sort_index()frame = DataFrame(np.arange(8).reshape((2,4)),index = ['three','one'],columns = ['d','a','b','c'])#默認(rèn)是對(duì)行 “索引” 進(jìn)行排序,如果對(duì)列 “索引” 進(jìn)行排序,axis = 1 即可print frame.sort_index()print frame.sort_index(axis = 1)print frame.sort_index(axis = 1,ascending = False)#如果對(duì)值進(jìn)行排序,用的是order函數(shù),注意所有的缺失值會(huì)放到最后(如果有的話)print obj.order()#numpy中的sort也可以用來(lái)排序print np.sort(obj)#如果相對(duì)DataFrame的值進(jìn)行排序,函數(shù)還是sort_index,只不過(guò)后面需要加一個(gè)參數(shù)byframe = DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]})print frame.sort_index(by = ['a','b'])#rank函數(shù)返回從小到大排序的下標(biāo),對(duì)于平級(jí)的數(shù),rank是通過(guò)“為各組分配一個(gè)平均排名”的方式破壞評(píng)級(jí)關(guān)系#下標(biāo)從1開(kāi)始obj = Series([7,-5,7,4,2,0,4])print obj.rank()#而numpy中的argsort函數(shù)比較奇怪,返回的是把數(shù)據(jù)進(jìn)行排序之后,按照值得順序?qū)?yīng)的下標(biāo),下標(biāo)從0開(kāi)始print np.argsort(obj) #打印結(jié)果為:1,5,4,3,6,0,2 按照這個(gè)下標(biāo)順序恰好可以得到從小打到的值,見(jiàn)下面print obj[np.argsort(obj)]#rank函數(shù)中有一個(gè)method選項(xiàng),用來(lái)規(guī)定下標(biāo)的方式print obj.rank(method = 'first',ascending=False)print obj.rank(method = 'max',ascending=False)print obj.rank(method = 'min',ascending=False)#對(duì)于DataFrame,rank函數(shù)默認(rèn)把每一列排好并返回坐標(biāo)print frame.rank()print frame.rank(axis = 1)

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

#-*- encoding:utf-8 -*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#雖然pandas的很多函數(shù)(如reindex)要求標(biāo)簽唯一,但是并不具有強(qiáng)制性obj = Series(range(5),index = list('aabbc'))print obj#索引是否唯一用is_unique看是否唯一print obj.index.is_unique#對(duì)于重復(fù)值的索引,選取的話返回一個(gè)Series,唯一的索引返回一個(gè)標(biāo)量print obj['a']#對(duì)于DataFrame也是如此df = DataFrame(np.random.randn(4,3),index = list('aabb'))print dfprint df.ix['b']#####自己導(dǎo)入數(shù)據(jù)的時(shí)候數(shù)據(jù)處理之前可以做一下index唯一性等,自己創(chuàng)建DataFrame注意不能這樣

3、匯總和計(jì)算描述統(tǒng)計(jì)

#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport time#pandas 對(duì)象擁有一組常用的數(shù)學(xué)和統(tǒng)計(jì)方法,大部分屬于簡(jiǎn)約統(tǒng)計(jì),用于從Series中提取一個(gè)值,或者   從DataFrame中提取一列或者一行Series#注意:與NumPy數(shù)組相比,這些函數(shù)都是基于沒(méi)有缺失數(shù)據(jù)的建設(shè)構(gòu)建的,也就是說(shuō):這些函數(shù)會(huì)自動(dòng)忽略缺失值。df = DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index = list('abcd'),columns=['one','two'])print df.sum()print df.sum(axis = 1)#下面是一些函數(shù),idxmin 和 idmax 返回的是達(dá)到最小或者最大的索引print df.idxmin()print df.idxmin(axis=1)#關(guān)于累積型的函數(shù)print df.cumsum()#describe函數(shù),與R語(yǔ)言中的describe函數(shù)基本相同print df.describe()#對(duì)于非數(shù)值型的數(shù)據(jù),看看下面的結(jié)果obj = Series(['c','a','a','b','d'] * 4)print obj.describe()'''結(jié)果為:count     20unique     4top        afreq       8其中,freq是指字母出現(xiàn)的最高頻率'''

#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport time#下面看一下cummin函數(shù)#注意:這里的cummin函數(shù)是截止到目前為止的最小值,而不是加和以后的最小值frame = DataFrame([[1,2,3,4],[5,6,7,8],[-10,11,12,-13]],index = list('abc'),columns = ['one','two','three','four'])print frame.cummin()print frame
>>>
   one  two  three  four
a    1    2      3     4
b    1    2      3     4
c  -10    2      3   -13
   one  two  three  four
a    1    2      3     4
b    5    6      7     8
c  -10   11     12   -13

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

有些匯總統(tǒng)計(jì)(如相關(guān)系數(shù)和協(xié)方差)是通過(guò)參數(shù)對(duì)計(jì)算出來(lái)的。這一節(jié)數(shù)據(jù)得不到?上不去網(wǎng)。

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

#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltobj = Series(['a','a','b','f','e'])uniques = obj.unique()uniques.sort() #記住這是就地排序#print uniques#下面進(jìn)行計(jì)數(shù)統(tǒng)計(jì),注意得到的是按照出現(xiàn)的頻率降序排列#print obj.value_counts()#value_counts還是一個(gè)頂級(jí)的pandas方法??捎糜谌魏问菙?shù)組或者序列#print obj.values#print pd.value_counts(obj.values,sort = False)#最后是isin 判斷矢量化集合的成員資格,可用于選取Series中或DataF列中的子集mask = obj.isin(['b','c'])print maskprint obj[mask]data = DataFrame({'Qu1':[1,3,4,3,4],                  'Qu2':[2,3,1,2,3],                  'Qu3':[1,5,2,4,4]})print dataprint data.apply(pd.value_counts).fillna(0)

上面這幾個(gè)函數(shù)是真的非常實(shí)用!

4、處理缺失數(shù)據(jù)

#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport timefrom numpy import nan as NA#pandas本來(lái)就被設(shè)計(jì)成自動(dòng)忽略了缺失值、#nan None 都看做缺失值str_data = Series(['a',np.nan,'b','c'])str_data[0] = Noneprint str_data.isnull()print str_data.notnull()
>>>
0     True
1     True
2    False
3    False
0    False
1    False
2     True
3     True
#NumPy的數(shù)據(jù)類(lèi)型中缺少真正的NA數(shù)據(jù)類(lèi)型或位模式??
 

濾除缺失數(shù)據(jù)

#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport timefrom numpy import nan as NAdata = Series([1,NA,3.5,7,NA])#注意返回的是不為NA的值的原來(lái)的索引,不是移除之后的索引
#有一個(gè)函數(shù) reset_index 這個(gè)函數(shù)(方法?)可以重新設(shè)置index,其中drop = True選項(xiàng)會(huì)丟棄原來(lái)的索引而設(shè)置新的從0開(kāi)始的索引,這個(gè)方法只對(duì)DataFrame有用貌似。
print data.dropna()#下面的結(jié)果一樣print data[data.notnull()]data1 = DataFrame([[1,2,3],[NA,2.3,4],[NA,NA,NA]])#注意:由于DataFrame的設(shè)定,只要有NA的行就會(huì)舍棄print data1.dropna()#傳入how = 'all' 則丟掉全為NA的行,這里的 how 的起名真的有點(diǎn)隨心所欲了,哈哈print data1.dropna(how = 'all')#丟棄列print data1.dropna(how = 'all',axis = 1)#還有一個(gè)參數(shù),threshdata2 = DataFrame(np.random.randn(7,3))data2.ix[:4,1] = NAdata2.ix[:2,2] = NA#print data2#這里的thresh函數(shù)是選取最少non-NA值個(gè)數(shù)的行選出來(lái)print data2.dropna(thresh = 2)print data2.dropna(thresh = 4,axis = 1)

填充缺失數(shù)據(jù)

#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport timefrom numpy import nan as NA#主要用fillna方法填充N(xiāo)A處的值data2 = DataFrame(np.random.randn(7,3))data2.ix[:4,1] = NAdata2.ix[:2,2] = NA#fillna返回一個(gè)新對(duì)象,inplace = True 可以就地填充print data2.fillna(0)#print data2.fillna(0,inplace = True)#print data2#為不同的列填充要用到字典print data2.fillna({1:0.5,3:-1})#對(duì)reindex有效的的那些差值方法也可適用于fillna,請(qǐng)向上看,或者搜索 reindex 即可df = DataFrame(np.random.randn(6,3))df.ix[2:,1] = NAdf.ix[4:,2] = NAprint df.fillna(method = 'ffill',limit = 2)#只要稍微動(dòng)動(dòng)腦子,我們就可以知道向NA處可以填充均值等其他數(shù)data = Series([1.2,NA,4,NA])print data.fillna(data.mean())

fillna的參數(shù)如下:

5、層次化索引

層次化索引(hierarchical index)是pandas的重要功能,這能使在一個(gè)軸上擁有兩個(gè)以上的索引級(jí)別。抽象點(diǎn)說(shuō),它能使你以低維度形式處理高維度。

#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport timedata = Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,2,3]])#print data#下面是索引的選取方式print data.indexprint data['b']print data['b':'c']print data.ix[['b','d']]#下面是“內(nèi)層”的選取方式print data[:,2]#層次化索引在數(shù)據(jù)重塑和基于分組操作(如透視表生成)中扮演者重要的角色,比如用unstack方式重排DataFrame:print data.unstack()#stack是unstack的逆運(yùn)算print data.unstack().stack()#對(duì)于DataFrame,每個(gè)軸都可以有分層索引frame = DataFrame(np.arange(12).reshape((4,3)),index = [['a','a','b','b'],[1,2,1,2]],columns = [['Ohio','Ohio','Colorado'],['Green','Red','Green']])#print frame#注意下面的方式:是為每一個(gè)軸規(guī)定名字,跟frame.index.names = ['key1','key2']frame.columns.names = ['state','color']#print frame#print frame['Ohio']#可以單獨(dú)創(chuàng)建MultiIndex然后復(fù)用#下面的multiindex可以這樣創(chuàng)建,注意下面的生成方式columns = pd.MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Green']],names = ['state','color'])frame1 = DataFrame(np.arange(12).reshape((4,3)),columns = columns)print frame1#重排順序,調(diào)整索引級(jí)別print frame.swaplevel('key1','key2')#sortlevel則根據(jù)但各級(jí)別中的值對(duì)數(shù)據(jù)進(jìn)行排序,通常用swaplevel是也會(huì)用到sortlevel(很合理)#注意得到的是副本,不是就地修改print frame.sortlevel(1)print frame.swaplevel(0,1).sortlevel(0)print frame#許多對(duì)DataFrame和Series進(jìn)行描述匯總的統(tǒng)計(jì)都有一個(gè)level選項(xiàng),用于指定匯總方式print frame.sum(level = 'key2')#不指定level的話,會(huì)按照列匯總出所有列名的和print frame.sum()print frame.sum(level = 'color',axis = 1)
#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport time#人們經(jīng)常想將DataFrame的一個(gè)或者多個(gè)列當(dāng)作行索引來(lái)用,或者可能需要將行索引變成DataFrame的列frame = DataFrame({'a':range(7),'b':range(7,0,-1),'c':['one','one','one','two','two','two','two'],'d':[0,1,2,0,1,2,3]})print frame#DataFrame中的set_index函數(shù)會(huì)將其一個(gè)或者多個(gè)列轉(zhuǎn)換為行索引frame2 = frame.set_index(['c','d'])print frame2  #其實(shí)就是利用第3、4列進(jìn)行一次分類(lèi)匯總frame3 = frame.set_index(['c','d'],drop = False)#與set_index相反的是reset_index函數(shù)print frame2.reset_index()#下面進(jìn)行一次測(cè)試frame4 = DataFrame([[0,7],[1,6],[2,5],[3,4],[4,3],[5,2],[6,1]],index = [['one','one','one','two','two','two','two'],[0,1,2,0,1,2,3]],columns=['a','b'])frame4.index.names = ['c','d']print frame4print frame4.reset_index().sort_index(axis = 1)

其他有關(guān)pandas的話題

#-*- encoding:utf-8 -*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport pandas.io.data  as web#這里說(shuō)的是一些蛋疼的問(wèn)題:整數(shù)索引和整數(shù)標(biāo)簽ser = Series(np.arange(3.))#print ser[-1]  #報(bào)錯(cuò),因?yàn)檎麛?shù)索引的歧義性ser2 = Series(np.arange(3.),index = ['a','b','c'])print ser2[-1] #正確#ix函數(shù)總是面向標(biāo)簽的print ser.ix[:1]#如果需要可靠的、不考慮索引類(lèi)型的、基于位置的索引,可以使用Series的iget_value方法,Dataframe的irow 和 icol方法ser3 = Series(range(3),index= [-5,1,3])print ser3.iget_value(2)frame = DataFrame(np.arange(6).reshape(3,2),index = [2,0,1])print frame.irow(0)#pandas 有一個(gè)Panel數(shù)據(jù)結(jié)構(gòu)(不是主要內(nèi)容),可以看作是三維的DataFrame。pandas中的多維數(shù)據(jù)可以利用多層索引進(jìn)行處理#可以利用DataFrame對(duì)象組成的字典或者一個(gè)三維ndarray來(lái)創(chuàng)建Panel對(duì)象pdata = pd.Panel(dict((stk,web.get_data_yahoo(stk,'1/1/2009','6/1/2012')) for stk in ['AAPL','GOOG','MSFT','DELL']))#網(wǎng)絡(luò)錯(cuò)誤,得不到數(shù)據(jù)#Panel的每一項(xiàng)都是一個(gè)DataFrame.
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
python之pandas用法詳解
利用Python進(jìn)行數(shù)據(jù)分析
機(jī)器學(xué)習(xí)之Pandas教程(上)
Python數(shù)據(jù)分析——Pandas數(shù)據(jù)結(jié)構(gòu)和操作
Python學(xué)習(xí)筆記
Python數(shù)據(jù)分析-Pandas
更多類(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)系客服