pandas筆記(pandas Data Structures)

pandas包含數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作工具,可用于進(jìn)行數(shù)據(jù)清理和快速分析。pandas經(jīng)常和數(shù)字計(jì)算工具(比如NumPy和SciPy)一起使用分析文庫,或者與matplotlib一起使用進(jìn)行數(shù)據(jù)的可視化。pandas采用NumPy的基于數(shù)組計(jì)算的部分慣用風(fēng)格,特別是基于數(shù)組的計(jì)算函數(shù)和不帶for循環(huán)的數(shù)據(jù)處理剥槐。雖然pandas采用了許多來自NumPy的編碼習(xí)慣用法,但最大的區(qū)別在于pandas是為處理表格或異質(zhì)性(heterogeneous)數(shù)據(jù)而設(shè)計(jì)的宪摧。相反粒竖,NumPy適合處理均一的(homogeneous)數(shù)值陣列數(shù)據(jù)。

使用下面代碼調(diào)用pandas:

import pandas as pd

所以几于,如果你看到了有pd.**這樣的代碼蕊苗,就說明是pandas的功能。

有關(guān)于pandas的數(shù)據(jù)結(jié)構(gòu)沿彭,你需要了解兩種主要的數(shù)據(jù)結(jié)構(gòu):Series 和 DataFrame朽砰。雖然這兩個(gè)數(shù)據(jù)結(jié)構(gòu)不能解決所有的問題,但是卻可以提供一個(gè)堅(jiān)實(shí)的喉刘、易于使用的應(yīng)用基礎(chǔ)瞧柔。

Series

Series是一個(gè)一維的、類似數(shù)組的對(duì)象睦裳,它包含一系列的值造锅,和一個(gè)相關(guān)數(shù)組(數(shù)據(jù)標(biāo)簽),也叫做索引(index)廉邑。最簡單的Series是由一個(gè)數(shù)組組成的數(shù)據(jù):

In [1]: import pandas as pd

In [2]: obj = pd.Series([4, 7, -5, 3])

In [3]: obj
Out[3]:
0    4
1    7
2   -5
3    3
dtype: int64

In [4]: obj.values
Out[4]: array([ 4,  7, -5,  3])

In [5]: obj.index
Out[5]: RangeIndex(start=0, stop=4, step=1)

因?yàn)樯厦嫖覀儾]有為數(shù)據(jù)指定索引哥蔚,所以默認(rèn)的索引就是從0開始的整數(shù)倒谷,當(dāng)然你可以自定義數(shù)據(jù)的索引:

In [6]: obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])

In [7]: obj2
Out[7]:
d    4
b    7
a   -5
c    3
dtype: int64

In [8]: obj2.index
Out[8]: Index(['d', 'b', 'a', 'c'], dtype='object')

篩選大于0的元素以及其對(duì)應(yīng)的索引:

In [9]: obj2[obj2>0]
Out[9]:
d    4
b    7
c    3
dtype: int64

對(duì)Series進(jìn)行計(jì)算:

In [10]: obj2 * 2
Out[10]:
d     8
b    14
a   -10
c     6
dtype: int64

如果你的data是一個(gè)python dict,也可以通過dict構(gòu)建一個(gè)Series:

In [11]: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}

In [12]: obj3 = pd.Series(sdata)

In [13]: obj3
Out[13]:
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

你也可以從Series里提取出指定的索引以及其對(duì)應(yīng)的內(nèi)容:

In [15]: states = ['California', 'Ohio', 'Oregon', 'Texas']

In [16]: obj4 = pd.Series(sdata,index=states)

In [17]: obj4
Out[17]:
California        NaN #這里顯示的是NaN肺素,是因?yàn)樵趏bj3里并沒有索引為“California”的內(nèi)容
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

將兩個(gè)Seires相加:

In [18]: obj3 + obj4
Out[18]:
California         NaN #只有obj4里有California這個(gè)索引
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN #只有obj3里有Utah這個(gè)索引恨锚,所以任何數(shù)和NaN相加都是NaN
dtype: float64

給對(duì)象命名宇驾,并且給索引這一列加一個(gè)列名:

In [19]: obj4.name = 'population'

In [20]: obj4.index.name = 'state'

In [21]: obj4
Out[21]:
state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64

DataFrame

DataFrame對(duì)于很多分析過生信的人來說并不陌生倍靡,它是一個(gè)table,包含行和列课舍,行和列有各自的數(shù)據(jù)類型(數(shù)字塌西,字符串等等)。這里的DataFrame有行索引和列索引筝尾,你可以把它看成一個(gè)具有相同索引的Series字典捡需。數(shù)據(jù)被存儲(chǔ)在一個(gè)或更多的二維模塊里,而不是列表筹淫、字典或其他一些一維數(shù)組里站辉。

有很多種方法可以構(gòu)建DataFrame

(1)最常用的方法是利用等長的list組成的字典或者Numpy array來構(gòu)建DataFrame:

In [23]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
    ...: 'year': [2000, 2001, 2002, 2001, 2002, 2003],
    ...: 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}

In [24]: frame = pd.DataFrame(data)

In [25]: frame
Out[25]:
    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9
5  Nevada  2003  3.2

如果這里你用的是jupyter notebook的web界面,輸出的DataFrame會(huì)更好看一些:

查看DataFrame的前5列:

In [26]: frame.head()
Out[26]:
    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9

修改你的DataFrame的列名:

In [27]: pd.DataFrame(data, columns=['year', 'state', 'pop'])
Out[27]:
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9
5  2003  Nevada  3.2

提取DataFrame里的某一列:

In [28]: frame['state']
Out[28]:
0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
5    Nevada
Name: state, dtype: object

In [29]: frame['year']
Out[29]:
0    2000
1    2001
2    2002
3    2001
4    2002
5    2003
Name: year, dtype: int64

提取DateFrame里的行:

In [6]: frame.loc[frame['state']=='Ohio'] #提取state一列里是Ohio的行
Out[6]:
  state  year  pop
0  Ohio  2000  1.5
1  Ohio  2001  1.7
2  Ohio  2002  3.6

給DataFrame加一列:

In [13]: frame['eastern'] = frame.state == 'Ohio'

In [14]: frame
Out[14]:
    state  year  pop   eastern
0    Ohio  2000  1.5     True
1    Ohio  2001  1.7     True
2    Ohio  2002  3.6     True
3  Nevada  2001  2.4     False
4  Nevada  2002  2.9     False
5  Nevada  2003  3.2     False

刪除一列:

In [16]: del frame['eastern']

In [17]: frame
Out[17]:
    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9
5  Nevada  2003  3.2

顯示列名:

In [18]: frame.columns
Out[18]: Index(['state', 'year', 'pop'], dtype='object')

(2)利用嵌套字典構(gòu)建DataFrame

In [19]: pop = {'Nevada': {2001: 2.4, 2002: 2.9},
    ...: 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

In [20]: frame3 = pd.DataFrame(pop)

In [21]: frame3
Out[21]:
      Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2000     NaN   1.5

DataFrame轉(zhuǎn)置:

In [22]: frame3.T
Out[22]:
        2001  2002  2000
Nevada   2.4   2.9   NaN
Ohio     1.7   3.6   1.5

根據(jù)索引提取內(nèi)容:

In [23]: pd.DataFrame(pop, index=[2001, 2002, 2003])
Out[23]:
      Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2003     NaN   NaN #原dataFrame里沒有2003這個(gè)索引损姜,所以結(jié)果這里是NaN

給索引列和列名分別起名字:

In [24]: frame3.index.name = 'year'; frame3.columns.name = 'state'

In [25]: frame3
Out[25]:
state  Nevada  Ohio
year
2001      2.4   1.7
2002      2.9   3.6
2000      NaN   1.5
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載饰剥,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末摧阅,一起剝皮案震驚了整個(gè)濱河市汰蓉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棒卷,老刑警劉巖顾孽,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異比规,居然都是意外死亡若厚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蜒什,熙熙樓的掌柜王于貴愁眉苦臉地迎上來测秸,“玉大人,你說我怎么就攤上這事吃谣∑蚍猓” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵岗憋,是天一觀的道長肃晚。 經(jīng)常有香客問我,道長仔戈,這世上最難降的妖魔是什么关串? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任拧廊,我火速辦了婚禮,結(jié)果婚禮上晋修,老公的妹妹穿的比我還像新娘吧碾。我一直安慰自己,他們只是感情好墓卦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布倦春。 她就那樣靜靜地躺著,像睡著了一般落剪。 火紅的嫁衣襯著肌膚如雪睁本。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天忠怖,我揣著相機(jī)與錄音呢堰,去河邊找鬼。 笑死凡泣,一個(gè)胖子當(dāng)著我的面吹牛枉疼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鞋拟,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼骂维,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了严卖?” 一聲冷哼從身側(cè)響起席舍,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哮笆,沒想到半個(gè)月后来颤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稠肘,尸身上長有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
  • 文/蒙蒙 一肛根、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漏策,春花似錦派哲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巢寡,卻和暖如春喉脖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抑月。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舆蝴,地道東北人谦絮。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像洁仗,于是被迫代替她去往敵國和親层皱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345