數(shù)據(jù)分析之Pandas

歡迎來(lái)我的個(gè)人博客:fizzyi

Pandas介紹

查看pandas版本

import pandas as pd
pd.__version__

pandas主要的兩個(gè)數(shù)據(jù)結(jié)構(gòu)是SeriesDataFrame
導(dǎo)入模塊

import numpy as np
from pandas import Series,DataFrame

Pandas數(shù)據(jù)結(jié)果: Series

從一般意義上來(lái)講,Series可以簡(jiǎn)單的被認(rèn)為是一維的數(shù)組吠式。Series和一維數(shù)組最主要的區(qū)別在與Series類(lèi)型具有索引(index),可以和另一個(gè)編程中最常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)哈希聯(lián)系起來(lái)陡厘。

創(chuàng)建Series

創(chuàng)建一個(gè)Series的基本格式是s = Series(data,index=index,name=name)。首先我們從數(shù)組創(chuàng)建Series:

a = np.random.randn(5)
print(a)
s = Series(a)
print(s)


[-1.24962807 -0.85316907  0.13032511 -0.19088881  0.40475505]

0   -1.249628
1   -0.853169
2    0.130325
3   -0.190889
4    0.404755

可以在創(chuàng)建Series時(shí)添加index,并可使用Series.inde查看具體的index特占。但是需要注意的一點(diǎn)是糙置,當(dāng)從數(shù)組創(chuàng)建Series時(shí),若指定index,那么index長(zhǎng)度和data的長(zhǎng)度一致是目。

s = Series(np.random.randn(5),index=['a','b','c','d','e'])
print(s)

a    0.509906
b   -0.764549
c    0.919338
d   -0.084712
e    1.896407

創(chuàng)建Series的另一個(gè)可選項(xiàng)是name谤饭,可指定Series的名稱(chēng),可以用Series.name訪(fǎng)問(wèn)懊纳。

Series還可以從字典創(chuàng)建揉抵。

d = {'a':0,'b':1,'c':2}
print(d)

s = Series(d)
print s

{'a': 0.0, 'c': 2, 'b': 1}
a    0
b    1
c    2

使用字典創(chuàng)建Series時(shí)指定index的情形(index長(zhǎng)度不必和字典相同,如果多了的話(huà)嗤疯,pandas將會(huì)自動(dòng)為多余的index分配N(xiāo)aN)

字典創(chuàng)建的Series冤今,數(shù)據(jù)將按index的順序重新排列。

Series(4,index=['a','b','c','d'])
a    4
b    4
c    4
d    4
e    4

如果數(shù)據(jù)就是一個(gè)單一的變量茂缚,如數(shù)字4戏罢,那么Series將重復(fù)這個(gè)變量屋谭。

Series 數(shù)據(jù)的訪(fǎng)問(wèn)

訪(fǎng)問(wèn)Series數(shù)據(jù)可以和數(shù)組一樣使用下標(biāo),也可以像字典一樣使用索引龟糕,還可以使用一些條件過(guò)濾桐磁。

s = Series(np.random.randn(10),index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])
s[0]  #取第一位
s[:2]  #取0,1
s[[2,0,4]]  #取2讲岁,0我擂,4位
s[['e','i']]  #取index為e 和 i的
s[s > 0.5] #取值大于0.5的
'e' in s  #判斷s中有沒(méi)有下標(biāo)e

Pandas數(shù)據(jù)結(jié)構(gòu):DataFrame

DataFrame是將多個(gè)Series按列合并而成的二維數(shù)據(jù)結(jié)構(gòu),每個(gè)列單獨(dú)取出來(lái)是一個(gè)Series催首,和SQL數(shù)據(jù)庫(kù)中取出的數(shù)據(jù)是類(lèi)似的扶踊。DataFrame的優(yōu)勢(shì)在于可以方便的處理不同類(lèi)型的列。

創(chuàng)建DataFrame

方法一

從字典創(chuàng)建DataFrame郎任。DataFrame是一個(gè)二維的數(shù)據(jù)結(jié)果秧耗,是多個(gè)Series的集合體。先創(chuàng)建一個(gè)值是Series的字典舶治,然后轉(zhuǎn)換為DataFrame

d = {'one':Series([1.,2.,3.,],index=['a','b','c']),'two':Series([1.,2.,3.,4.],index=['a','b','c','d'])}
df = DataFrame(d)
print df

   one  two
a    1    1
b    2    2
c    3    3
d  NaN    4

可以指定所需的行和列分井,若字典中不含有對(duì)應(yīng)的元素,則為NaN

df = DataFrame(d,index=['r','d','a'],columns=['two','three'])
print df

   two three
r  NaN   NaN
d    4   NaN
a    1   NaN
  • dataframe.indexdataframe.columns查看DataFrame的行和列
  • dataframe.values則以數(shù)組的形式返回dataframe的元素

方法二

DataFrame也可以從值是數(shù)組的字典中創(chuàng)建霉猛,但是各個(gè)數(shù)組的長(zhǎng)度需要相同

d = {'one':[1,2,3,4],'tow':[4,3,2,1]}
df = DataFrame(d,index=['a','b','c','d'])
print df

   one  two
a    1    4
b    2    3
c    3    2
d    4    1

值如果不是數(shù)組尺锚,沒(méi)有這一限制,并且缺失值補(bǔ)成NaN

如果需要?jiǎng)?chuàng)建一個(gè)空的DataFrame

df = DataFrame()

方法三

使用concat函數(shù)基于Series或者DataFrame創(chuàng)建一個(gè)DataFrame

a = Series(range(5))
b = Series(np.linspace(4,20,5))
df = pd.concat([a,b],axis=1)
print df 

   0   1
0  0   4
1  1   8
2  2  12
3  3  16
4  4  20

其中axis=1表示按列合并惜浅,axis=0表示按行合并瘫辩。

df = DataFrame()
index = ['alpha','beta','gamma','delta','eta']
for i in range(5):
    a = DataFrame([np.linspace(i,5*i,5)],index=[index[i]])
    df = pd.concat([df,a],axis=0)
print df 

       0  1   2   3   4
alpha  0  0   0   0   0
beta   1  2   3   4   5
gamma  2  4   6   8  10
delta  3  6   9  12  15
eta    4  8  12  16  20

DataFrame數(shù)據(jù)的訪(fǎng)問(wèn)

因?yàn)?code>DataFrame是以列作為操作的基礎(chǔ)的,所以全部的操作都可以想象成先從DataFrame里取出來(lái)一列坛悉,再?gòu)倪@個(gè)series中取元素即可伐厌。

  • datafrae.column_name 只能選取一列 有列名,必須使用列名選取裸影,在沒(méi)有列名的時(shí)候是無(wú)效的挣轨。
  • dataframe[]可以選擇多列 無(wú)列名 使用下標(biāo)選取列
df.columns = ['a','b','c','d','e']

使用dataframe.columns為dataframe賦列名

從dataframe中單獨(dú)取一列出來(lái),其數(shù)據(jù)結(jié)構(gòu)顯示的是series轩猩,取兩列及以上的結(jié)果仍然是dataframe卷扮。訪(fǎng)問(wèn)特定的元素可以如series一樣使用下標(biāo)或者是索引。

若需要選取行均践,可以使用dataframe.iloc按下標(biāo)選取晤锹,或者使用dataframe.loc按索引選取。

print(df.iloc[1])
print(df.loc['beta'])

選取行還可以使用切片的方式或者是布爾類(lèi)型的向量

print(df[1:3])
bool_vec = [True,False,True,True,False]
print(df[bool_vec])

行列組合起來(lái)選取數(shù)據(jù)

print(df[['b','d']].iloc[[1,3]])
print(df.iloc[[1,3]][['b','d']])
print(df[['b','d']].loc[['beta','delta']])
print(df.loc[['beta','delta']][['b','d']])

如果只是某個(gè)特殊位置的元素的話(huà)彤委,dataframe.at 和dataframe.iat是最快的方式鞭铆,它們分別用于使用索引和下標(biāo)進(jìn)行訪(fǎng)問(wèn)。

print(df.iat[2,3])
print(df.at['gamma','d'])

dataframe.ix可以混合使用索引和下標(biāo)進(jìn)行訪(fǎng)問(wèn)葫慎,唯一需要注意的地方是行列內(nèi)部需要一致衔彻,不可以同時(shí)使用索引和下標(biāo)訪(fǎng)問(wèn)行或者列。

print(df.ix['gamma',4])
print(df.ix[['delta','gamma'],[1,4]])
print(df.ix[[1,2],['b','e']])
#錯(cuò)誤的寫(xiě)法
print(df.ix[['beta',2],['be','e']])
print(df.ix[[1,2],['b',4]])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偷办,一起剝皮案震驚了整個(gè)濱河市艰额,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椒涯,老刑警劉巖柄沮,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異废岂,居然都是意外死亡祖搓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)湖苞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拯欧,“玉大人,你說(shuō)我怎么就攤上這事财骨「渥鳎” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵隆箩,是天一觀(guān)的道長(zhǎng)该贾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捌臊,這世上最難降的妖魔是什么杨蛋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮理澎,結(jié)果婚禮上逞力,老公的妹妹穿的比我還像新娘。我一直安慰自己矾端,他們只是感情好掏击,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著秩铆,像睡著了一般砚亭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殴玛,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天捅膘,我揣著相機(jī)與錄音,去河邊找鬼滚粟。 笑死寻仗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凡壤。 我是一名探鬼主播署尤,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼耙替,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了曹体?” 一聲冷哼從身側(cè)響起俗扇,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箕别,沒(méi)想到半個(gè)月后铜幽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡串稀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年除抛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片母截。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡到忽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出清寇,到底是詐尸還是另有隱情绘趋,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布颗管,位于F島的核電站陷遮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏垦江。R本人自食惡果不足惜帽馋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望比吭。 院中可真熱鬧绽族,春花似錦、人聲如沸衩藤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赏表。三九已至检诗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓢剿,已是汗流浹背逢慌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留间狂,地道東北人攻泼。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親忙菠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子何鸡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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