pandas與numpy數(shù)據(jù)結(jié)構(gòu)

Pandas是python的一個(gè)數(shù)據(jù)分析包撵渡,最初由AQR Capital Management于2008年4月開發(fā)融柬,并于2009年底開源出來(lái),目前由專注于Python數(shù)據(jù)包開發(fā)的PyData開發(fā)team繼續(xù)開發(fā)和維護(hù)趋距,屬于PyData項(xiàng)目的一部分粒氧。Pandas最初被作為金融數(shù)據(jù)分析工具而開發(fā)出來(lái),因此节腐,pandas為時(shí)間序列分析提供了很好的支持外盯。 Pandas的名稱來(lái)自于面板數(shù)據(jù)(panel data)和python數(shù)據(jù)分析(data analysis)。panel data是經(jīng)濟(jì)學(xué)中關(guān)于多維數(shù)據(jù)集的一個(gè)術(shù)語(yǔ)翼雀,在Pandas中也提供了panel的數(shù)據(jù)類型饱苟。(下面的表格只能截圖了,mweb編輯的文章不能直接發(fā)布到簡(jiǎn)書)

pandas數(shù)據(jù)結(jié)構(gòu)

①Series:一維數(shù)組狼渊,與Numpy中的一維array類似箱熬。二者與Python基本的數(shù)據(jù)結(jié)構(gòu)List也很相近,其區(qū)別是:_List中的元素可以是不同的數(shù)據(jù)類型狈邑,而Array和Series中則只允許存儲(chǔ)相同的數(shù)據(jù)類型城须,這樣可以更有效的使用內(nèi)存,提高運(yùn)算效率官地。_

②Time- Series:以時(shí)間為索引的Series酿傍。

③DataFrame:二維的表格型數(shù)據(jù)結(jié)構(gòu)。很多功能與R中的data.frame類似驱入〕喑矗可以將DataFrame理解為Series的容器氯析。以下的內(nèi)容主要以DataFrame為主。

④Panel :三維的數(shù)組莺褒,可以理解為DataFrame的容器掩缓。

python本身的數(shù)據(jù)結(jié)構(gòu)

1. list

Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個(gè)元素都分配一個(gè)數(shù)字 - 它的位置遵岩,或索引你辣,第一個(gè)索引是0,第二個(gè)索引是1尘执,依此類推舍哄。可以使用append()方法來(lái)添加列表項(xiàng)誊锭”硇可以使用 del 語(yǔ)句來(lái)刪除列表的的元素。

list表達(dá)式
list包含的函數(shù)
list包含的方法

2.元組

元組與列表類似丧靡,不同之處在于元組的元素不能修改蟆沫。

元組使用小括號(hào),列表使用方括號(hào)温治。

元組創(chuàng)建很簡(jiǎn)單饭庞,只需要在括號(hào)中添加元素,并使用逗號(hào)隔開即可熬荆。

元組中只包含一個(gè)元素時(shí)舟山,需要在元素后面添加逗號(hào);

元組可以使用下標(biāo)索引來(lái)訪問元組中的值:

tup2[1:5]: (2, 3, 4, 5)

元組中的元素值是不允許修改的惶看,但我們可以對(duì)元組進(jìn)行連接組合

元組中的元素值是不允許刪除的捏顺,但我們可以使用del語(yǔ)句來(lái)刪除整個(gè)元組

元組運(yùn)算


元組運(yùn)算

3.字典

字典是另一種可變?nèi)萜髂P停铱纱鎯?chǔ)任意類型對(duì)象纬黎。

字典的每個(gè)鍵值(key=>value)對(duì)用冒號(hào)(:)分割幅骄,每個(gè)對(duì)之間用逗號(hào)(,)分割,整個(gè)字典包括在花括號(hào)({})中

d = {key1 : value1, key2 : value2 }

鍵必須是唯一的本今,但值則不必拆座。

訪問字典里的值:把相應(yīng)的鍵放入熟悉的方括弧

向字典添加新內(nèi)容的方法是增加新的鍵/值對(duì),修改或刪除已有鍵/值對(duì)如下實(shí)例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

dict['Age'] = 8; # update existing entry

dict['School'] = "DPS School"; # Add new entry

能刪單一的元素也能清空字典冠息,清空只需一項(xiàng)操作挪凑。

字典內(nèi)置函數(shù)
字典內(nèi)置方法

Numpy數(shù)據(jù)結(jié)構(gòu)

1. ndarray 數(shù)組

* ndarray是一個(gè)通用的同構(gòu)數(shù)據(jù)多維容器,即所有元素必須是相同類型

* 每個(gè)數(shù)組都有一個(gè)shape(一個(gè)表示各維度大小的元組)和一個(gè)dtype(說明數(shù)組數(shù)據(jù)類型) NumPy數(shù)組的維數(shù)稱為秩(rank)逛艰,一維數(shù)組的秩為1躏碳,二維數(shù)組的秩為2 data=array([[1, 9, 6], [2, 8, 5], [3, 7, 4]])

ndarry屬性

基本的索引和切片

arr=np.arange(10)

arr[5:8]切片第6個(gè)到第8個(gè)元素

視圖上的任何修改都會(huì)直接反映到源數(shù)組上。如arr[5:8]=12,則源數(shù)組的第6到第8個(gè)元素都會(huì)賦值為12.

arr[5:8].copy() 切片副本

arr2d[:2,1:] 切片第0散怖,1行向量與第1菇绵,2列向量交組成的數(shù)組

names = np.array(['Bob','Joe'])

arr[names == 'Bob'] 布爾型索引

花式索引

arr = np.empty((8,4))

for i in range(8):

arr[i] = i

整數(shù)列索引 arr[[4,3,0,6]], arr[[-3,-5,-7]]

多個(gè)索引組

arr = np.arange(32).reshape((8,4))

arr[[1,5,7,2],[0,3,1,2]] 得到 array([4, 23, 29, 10])

arr[[1,5,7,2]][:,[0,3,1,2]]

得到

array([[4,7,5,6],

[20,23,21,22],

[28,31,29,30],

[8,11,9,10]])

np.ix_同樣可以得到以上結(jié)果

arr[np.ix_([1,5,7,2],[0,3,1,2])]

花式索引總是將數(shù)據(jù)復(fù)制到新數(shù)組中

其他方法和屬性

其他方法和屬性

布爾值在計(jì)算過程中可以被當(dāng)做0或1處理

例如肄渗,result = 1* (cond1 -cond2) + 2*(cond2 & -cond1) + 3 * -(cond1 | cond2)

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

arr=np.arange(10)

np.save('some_array', arr) 將數(shù)組以二進(jìn)制格式,some_array.npy名稱保存在磁盤上咬最。

np.load('some_array.npy')加載

np.savez('array_archive.npz', a=arr, b=arr) 將多個(gè)數(shù)組保存在壓縮文件中

存取文本文件

arr = np.loadtxt('array_ex.txt',delimiter=',')將文件中數(shù)據(jù)加載到二維數(shù)組中

np.savetxt執(zhí)行相反操作

線性代數(shù)計(jì)算

x.dot(y) 相當(dāng)于np.dot(x,y)

inv(mat) 對(duì)可逆矩陣求逆

……

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

?* numpy.random模塊

?* np.random.normal(size=(4,4))生成標(biāo)準(zhǔn)正態(tài)分布的4*4樣本數(shù)組

?* seed 確定隨機(jī)數(shù)生成器的種子

?* permutation 返回一個(gè)序列的隨機(jī)排列或返回一個(gè)隨機(jī)排列的范圍

?* shuffle 對(duì)一個(gè)序列就地隨機(jī)排列

?* rand 產(chǎn)生均勻分布的樣本值

?* randint 從給定的上下限范圍隨機(jī)取整數(shù)

pandas數(shù)據(jù)結(jié)構(gòu)

1.Series結(jié)構(gòu) 類似于一維數(shù)組的對(duì)象翎嫡,索引在左邊,值在右邊永乌,若不指定索引惑申,會(huì)自動(dòng)創(chuàng)建一個(gè)0~N-1的整數(shù)型索引 In: obj2 = Series([4,7,-5,3], index=['d','b','a','c']) Out: d 4 b 7 a -5 c 3

series結(jié)構(gòu)

2.Pandas DataFrame結(jié)構(gòu) DataFrame是一個(gè)表格型數(shù)據(jù)結(jié)構(gòu),每列可以是不同的值類型(數(shù)值翅雏、字符串圈驼、布爾值等),它可以被看成由Series組成的字典枚荣,它既有行索引也有列索引碗脊。以一個(gè)或多個(gè)二維塊存放(而不是列表啼肩、字典或別的一維數(shù)據(jù)結(jié)構(gòu)) 構(gòu)建DataFrame的方法:

DataFrame結(jié)構(gòu)

索引對(duì)象

1.pandas的索引對(duì)象負(fù)責(zé)管理軸標(biāo)簽和其他元數(shù)據(jù)(比如軸名稱等)橄妆。index對(duì)象是不可以修改的,這樣才能使index對(duì)象在多個(gè)數(shù)據(jù)結(jié)構(gòu)之間安全共享祈坠。

2.重新索引 reindex

? ?obj2 = obj.reindex(['a','b','c','d','e'])

? ?按照reindex新索引進(jìn)行重排害碾,如果某個(gè)索引值不存在,就引入缺失值赦拘,

? ? obj.reindex(['a','b','c','d','e'], fill_value=0), 將缺失值賦值為0

? ?使用ffill可以實(shí)現(xiàn)前向值填充:

? ?obj3 = Series(['blue','pureple','yellow'], index=[0,2,4])

? ?obj3.reindex(range(6),method='ffill')

? ?fill/pad 前向填充(或搬運(yùn))值

? ?bfill/backfill 后向填充值

如果只傳入一個(gè)序列則會(huì)重新索引行

使用columns關(guān)鍵字即可重新索引列:

frame.reindex(columns=states)

同時(shí)重新索引:frame.reindex(index=['a','b','c','d'], method='ffill', columns=states)

limit 前向或后向填充時(shí)的最大填充量

ix使重新索引更加簡(jiǎn)潔:frame.ix[['a','b','c','d'],states]

1.其他功能

2.匯總和計(jì)算描述統(tǒng)計(jì)

統(tǒng)計(jì)描述

缺失值處理

缺失值處理

層次化索引

data=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]] In: data.index Out: Multiindex[('a',1),('a',2)....] 層次化索引在數(shù)據(jù)重塑和基于分組的操作(如透視表生成)中扮演著重要角色慌随, data.unstack()轉(zhuǎn)化為一個(gè)DataFrame,其逆運(yùn)算是stack data.unstack().stack()

對(duì)于DataFrame每條軸都可以有分層索引

frame = DataFrame(np.arange(12).reshape((4,3)), index=[['a','a','b','b'],[1,2,1,2]],columns=[['Ohio','Ohio','Colorado'],['Green','Red','Green']])


數(shù)據(jù)加載躺同、存儲(chǔ)與文件格式

1. 讀寫文本格式數(shù)據(jù)

讀寫文本格式數(shù)據(jù)

2.逐塊讀取文本文件?

在處理很大的文件時(shí)阁猜,可能只想讀取文件的一小部分或逐塊對(duì)文件進(jìn)行迭代 pd.read_csv(‘ch06/ex6.csv’, nrow=5) 只讀取幾行 chunker=pd.read_csv(‘ch06/ex6.csv’,chunksize=1000) #設(shè)置每次處理行數(shù)

tot = Series([])

for piece in chunker:

tot = tot.add(piece['key'].value_counts(), fill_value=0)

tot =tot.ordr(ascending=False)

3.將數(shù)據(jù)寫出到文本格式?

data.to_csv('ch06/out.csv') data.to_csv(sys.stout, sep='|') #指定分隔符?

data.to_csv(sys.stout, na_rep='NULL')

4.手工處理分隔符格式

直接使用Python內(nèi)置的csv模塊

import csv

f = open('cho6/ex7.csv')

reader = csv.reader(f)

for line in reader:

print line

這樣得到一系列列表

為時(shí)數(shù)據(jù)格式合乎要求,做如下操作

lines = list(csv.reader(open('cho6/ex7.csv')))

header, values = lines[0],lines[1:]

data_dict = {h: v for h, v in zip(header, zip(*values))}

定義子類處理各種分隔符:

class my_dialect(csv.Dialect):

lineterminator = '\n'

delimiter = ';'

quotechar = '"'

reader = csv.reader(f, diaect=my_dialect)


JSON數(shù)據(jù)

JSON= JavaScript Object Notation

1.加載json數(shù)據(jù)

result=json.loads(obj)

2.將Python對(duì)象轉(zhuǎn)為json格式

asjson=json.dumps(result)

3.轉(zhuǎn)換為DataFrame結(jié)構(gòu)

siblings = DataFrame(result['siblings'],columns=['name','age'])

4.web信息收集

from lxml.html import parse

from urllib2 import urlopen

parsed =parse(urlopen('http://www.baidu.com'))

doc = parsed.getroot()

獲取該頁(yè)面的所有URL

urls = [lnk.get('href') for lnk in doc.findall('.//a')]

a.pop() # 把最后一個(gè)值4從列表中移除并作為pop的返回值

a.append(5) # 末尾插入值蹋艺,[1, 2, 3, 5]

a.index(2) # 找到第一個(gè)2所在的位置剃袍,也就是1

a[2] # 取下標(biāo),也就是位置在2的值捎谨,也就是第三個(gè)值3

a += [4, 3, 2] # 拼接民效,[1, 2, 3, 5, 4, 3, 2]

a.insert(1, 0) # 在下標(biāo)為1處插入元素0,[1, 0, 2, 3, 5, 4, 3, 2]

a.remove(2) # 移除第一個(gè)2涛救,[1, 0, 3, 5, 4, 3, 2]

a.reverse() # 倒序畏邢,a變?yōu)閇2, 3, 4, 5, 3, 0, 1]

a[3] = 9 # 指定下標(biāo)處賦值,[2, 3, 4, 9, 3, 0, 1]

b = a[2:5] # 取下標(biāo)2開始到5之前的子序列检吆,[4, 9, 3]

c = a[2:-2] # 下標(biāo)也可以倒著數(shù)舒萎,方便算不過來(lái)的人,[4, 9, 3]

d = a[2:] # 取下標(biāo)2開始到結(jié)尾的子序列蹭沛,[4, 9, 3, 0, 1]

e = a[:5] # 取開始到下標(biāo)5之前的子序列臂寝,[2, 3, 4, 9, 3]

f = a[:] # 取從開頭到最后的整個(gè)子序列虱肄,相當(dāng)于值拷貝,[2, 3, 4, 9, 3, 0, 1]

a[2:-2] = [1, 2, 3] # 賦值也可以按照一段來(lái)交煞,[2, 3, 1, 2, 3, 0, 1]

g = a[::-1] # 也是倒序咏窿,通過slicing實(shí)現(xiàn)并賦值,效率略低于reverse()

a.sort()

print(a) # 列表內(nèi)排序素征,a變?yōu)閇0, 1, 1, 2, 2, 3, 3]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末集嵌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子御毅,更是在濱河造成了極大的恐慌根欧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件端蛆,死亡現(xiàn)場(chǎng)離奇詭異凤粗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)今豆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門嫌拣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人呆躲,你說我怎么就攤上這事异逐。” “怎么了插掂?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵灰瞻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我辅甥,道長(zhǎng)酝润,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任璃弄,我火速辦了婚禮要销,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谢揪。我一直安慰自己蕉陋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布拨扶。 她就那樣靜靜地躺著凳鬓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪患民。 梳的紋絲不亂的頭發(fā)上缩举,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼仅孩。 笑死托猩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辽慕。 我是一名探鬼主播京腥,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼溅蛉!你這毒婦竟也來(lái)了公浪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤船侧,失蹤者是張志新(化名)和其女友劉穎欠气,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镜撩,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡预柒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袁梗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宜鸯。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖围段,靈堂內(nèi)的尸體忽然破棺而出顾翼,到底是詐尸還是另有隱情,我是刑警寧澤奈泪,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站灸芳,受9級(jí)特大地震影響涝桅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烙样,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一冯遂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谒获,春花似錦蛤肌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赔硫,卻和暖如春炒俱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工权悟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砸王,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓峦阁,卻偏偏與公主長(zhǎng)得像谦铃,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榔昔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容