pandas入門(持續(xù)更新)

Python 2.7
IDE Pycharm
Pandas 0.18.0


應(yīng)該每天離目標(biāo)更近一點

首先

推薦一下IDE宵凌,用的最順手的是Pycharm票编,再配合anaconda2陷遮,簡直完美挠乳,什么科學(xué)計算庫都有蛾茉,numpy讼呢,scipy,matplotlib應(yīng)有盡有谦炬,乃大殺器有木有悦屏,對我們這種小白來說,什么亂七八糟依賴包好蛋疼有木有键思,有了Pycharm+anaconda2础爬,我都被自己機智哭了。稚机。幕帆。。

這里寫圖片描述

哈哈哈赖条,不鬧失乾,↓是如何安裝anaconda2方法囖囖囖
pycharm下安裝anaconda2方法,詳見@木子嵐的回答


這里對anaconda2的強大我就不贅述了纬乍,直接開始今天的pandas學(xué)習(xí)咯~此博客主要還是自己當(dāng)筆記看碱茁,所以,如果能幫到你仿贬,不勝榮幸纽竣!


Day 1

Series的使用

# -*- coding: utf-8 -*-
from pandas import  *
obj = Series([4,7,-5,3])#標(biāo)簽結(jié)構(gòu)。索引在左茧泪,值再右
print obj
print obj.values
print obj.index
0    4
1    7
2   -5
3    3
dtype: int64
----------------------------------
[ 4  7 -5  3]
----------------------------------
RangeIndex(start=0, stop=4, step=1)

其實就是有有序字典的過程蜓氨,還可以索引和數(shù)組運算!

obj2 = Series([4,7,-5,3],index=['d','b','a','c'])#對應(yīng)標(biāo)簽
print obj2
print obj2.index
print obj2['a']#根據(jù)索引队伟,其實是個有序字典
print obj2[['c','b','a']]#也可以取一組值
print obj2[obj2>0]
print obj2*2 #會保留索引和值之間的聯(lián)系
d    4
b    7
a   -5
c    3
dtype: int64
----------------------------------
Index([u'd', u'b', u'a', u'c'], dtype='object')
----------------------------------
-5
----------------------------------
c    3
b    7
a   -5
dtype: int64
----------------------------------
d    4
b    7
c    3
dtype: int64
----------------------------------
d     8
b    14
a   -10
c     6
dtype: int64

字典直接用來建立Series穴吹,簡單快捷

sdata={'ohii':3000,'nam':2000,'wyi':2999}
obj3 = Series(sdata)
print obj3
nam     2000
ohii    3000
wyi     2999
dtype: int64

利用index后添標(biāo)簽(或修改),用isnull和notnull判斷缺失數(shù)據(jù)

states={'ohii','nam','wyi','ckla'}
obj4 = Series(sdata,index=states)#無對應(yīng)鍵值就輸出NaN
print obj4
print isnull(obj4)
print notnull(obj4)
print obj3+obj4#會自動對齊
ckla       NaN
ohii    3000.0
wyi     2999.0
nam     2000.0
dtype: float64
----------------------------------
ckla     True
ohii    False
wyi     False
nam     False
dtype: bool
----------------------------------
ckla    False
ohii     True
wyi      True
nam      True
dtype: bool
----------------------------------
ckla       NaN
nam     4000.0
ohii    6000.0
wyi     5998.0
dtype: float64

Series對象本身及索引都有一個name屬性嗜侮,該屬性和pandas其他的關(guān)鍵功能關(guān)系非常密切

obj4.name = 'population'
obj4.index.name = 'state'
print obj4
state#索引
ckla       NaN
ohii    3000.0
wyi     2999.0
nam     2000.0
Name: population, dtype: float64

扯淡

今天研究生開題港令,沒時間多做其他的啥容,本來想著吧knn窗口化實現(xiàn)一下,可惜今天沒時間咯顷霹,還好老師人很好咪惠,學(xué)渣僥幸開題成功,叮~您的假期已充費淋淀!


這里寫圖片描述

BTW

我是按照->利用python進行數(shù)據(jù)分析<-來學(xué)習(xí)的遥昧,這本書非常好的(聽說),還有就是朵纷,可能pandas涉及到不在那么大眾渠鸽,所以有些詞不知道意思還是建議查官方文檔,這里給個官文pandas速查手冊


Day 2

DataFrame的使用

  • 通過字典建立DataFrame
In[20]: from pandas import *
data = {
        'state':['ohio','ohio','nevada','nevada'],
        'year':[2000,2001,2003,2002],
        'pop':[1.5,1.6,3.6,2.9]
        }

frame = DataFrame(data) # 不規(guī)定的話就columns隨機排柴罐,index默認(rèn)為0,1憨奸,2...

In[21]: frame

Out[21]: 
   pop   state  year
0  1.5    ohio  2000
1  1.6    ohio  2001
2  3.6  nevada  2003
3  2.9  nevada  2002

  • 指定索引位置
In[22]: DataFrame(data,columns=['year','state','pop']) #按照規(guī)定順序排序

Out[22]: 
   year   state  pop
0  2000    ohio  1.5
1  2001    ohio  1.6
2  2003  nevada  3.6
3  2002  nevada  2.9

  • 指定檢索革屠,未指定則被按照NaN處理
In[24]: frame2 = DataFrame(data,columns=['year','state','pop','somethingNone'],index=['one','two','three','four']) # 自己安排columns和index,columns檢索不到的按照NaN處理排宰,和Series一樣

In[25]: frame2

Out[25]: 
       year   state  pop somethingNone
one    2000    ohio  1.5           NaN
two    2001    ohio  1.6           NaN
three  2003  nevada  3.6           NaN
four   2002  nevada  2.9           NaN

  • 獲取column包含的內(nèi)容似芝,檢索列
In[26]: frame2['state'] #檢索,獲取為一個Series

Out[26]: 
one        ohio
two        ohio
three    nevada
four     nevada
Name: state, dtype: object

  • 檢索行板甘,注意語法Obj.ix['index']
In[27]: frame2.ix['three'] #索引index的時候注意

Out[27]: 
year               2003
state            nevada
pop                 3.6
somethingNone       NaN
Name: three, dtype: object

  • 類似字典的賦值操作
In[30]: frame2['somethingNone'] = 10 #直接可賦值操作

In[30]: frame2

Out[30]: 
       year   state  pop  somethingNone
one    2000    ohio  1.5             10
two    2001    ohio  1.6             10
three  2003  nevada  3.6             10
four   2002  nevada  2.9             10

  • 使用Series創(chuàng)建DataFrame
In[34]: val = Series([-1.2,-1.5],index = ['two','four']) # 如果賦值為Series的話党瓮,注意index位置及大小

In[35]: frame2

Out[35]: 
       year   state  pop  somethingNone
one    2000    ohio  1.5            NaN
two    2001    ohio  1.6           -1.2
three  2003  nevada  3.6            NaN
four   2002  nevada  2.9           -1.5

  • 刪除列columns操作
In[47]: del frame2['somethingNone'] # 刪除columns操作,

In[48]: frame.columns

Out[48]: Index([u'pop', u'state', u'year'], dtype='object')

  • 多層字典創(chuàng)建DataFrame
In[50]: pop = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}

In[51]: frame3 = DataFrame(pop) # 字典的字典創(chuàng)建DataFrame

In[52]: frame3 #外層字典作為列盐类,內(nèi)層作為行索引index

Out[52]: 
      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6

  • DataFrame轉(zhuǎn)置操作
In[53]: frame3.T #轉(zhuǎn)置操作

Out[53]: 
        2000  2001  2002
Nevada   NaN   2.4   2.9
Ohio     1.5   1.7   3.6

  • 由Series組成的字典構(gòu)建DataFrame
In[54]: pdata = {'Ohio':frame3['Ohio'][:-1],'Nevada':frame3['Nevada'][:2]} #Series組成的字典也可以DataFrame化寞奸,注意切片操作

In[55]: DataFrame(pdata)

Out[55]: 
      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7

  • 添加index和columns名字屬性

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

In[57]: frame3

Out[57]: 
state  Nevada  Ohio
year               
2000      NaN   1.5
2001      2.4   1.7
2002      2.9   3.6

Day 3

index的使用

構(gòu)建Series或DataFrame時,所用到的任何數(shù)組或其他序列的標(biāo)簽都會被轉(zhuǎn)化成為一個Index

首選看一下index有哪些方法

index的方法和屬性

  • 構(gòu)建Series
In[3]: obj = Series(range(3),index = ['a','b','c'])
In[4]: obj

Out[4]: 
a    0
b    1
c    2
dtype: int64

  • 獲取index對象

In[5]: index = obj.index
In[6]: index

Out[6]: Index([u'a', u'b', u'c'], dtype='object')
In[7]: index[1:] #切片

Out[7]: Index([u'b', u'c'], dtype='object')

In[11]: 'a' in obj.index

Out[11]: True
  • 創(chuàng)建新的Series有序?qū)ο?/li>
In[14]: obj2 = Series(range(3),index = ['d','e','f'])

In[15]: index2 = obj2.index

  • 連接另一個index對象

In[19]: index3 = index.append(index2) #連接另一個index對象在跳,產(chǎn)生新的index

In[20]: index3

Out[20]: Index([u'a', u'b', u'c', u'd', u'e', u'f'], dtype='object')
  • 判斷index中元素是否唯一
In[23]: index3.is_unique #index是否有唯一

Out[23]: True

In[24]: index3.unique() #計算唯一值的數(shù)組

Out[24]: array(['a', 'b', 'c', 'd', 'e', 'f'], dtype=object)
  • 計算index3和index2的不同即差值
In[25]: index3.diff(index2) #計算差值
C:\Program Files (x86)\JetBrains\PyCharm 5.0.3\helpers\pydev\pydevconsole.py:1: FutureWarning: diff is deprecated. Use difference instead

Out[25]:   from _pydev_imps._pydev_thread import start_new_thread #提示需要導(dǎo)入包
Index([u'a', u'b', u'c'], dtype='object')

  • 計算index和index2的并集

In[26]: index.union(index2) #計算并集

Out[26]: Index([u'a', u'b', u'c', u'd', u'e', u'f'], dtype='object')
  • 從index中刪除元素枪萄,注意不改變原來的index,而是構(gòu)建新的index
In[28]: index3.delete(3) #刪除索引i處的元素

Out[28]: Index([u'a', u'b', u'c', u'e', u'f'], dtype='object') #即刪除了第四個索引元素

In[29]: index3 #但是對index3本身并不起作用猫妙,還是符合index不可修改的原則

Out[29]: Index([u'a', u'b', u'c', u'd', u'e', u'f'], dtype='object')

  • drop方法瓷翻,丟棄指定軸上的項

In[31]: index3.drop('a') #刪除傳入的值,根據(jù)index名字來進行刪除操作

Out[31]: Index([u'b', u'c', u'd', u'e', u'f'], dtype='object')

reindex的使用

作用是創(chuàng)建一個適應(yīng)新索引的新對象割坠,同樣不改變原來的索引齐帚,而產(chǎn)生一個新的對象


  • Series的reindex的使用
In[43]: obj

Out[43]: 
a    0
b    1
c    2
dtype: int64

In[44]: obj3 = obj.reindex(['1','2','3','a','b']) #重新根據(jù)索引進行排序,對某個索引不存在時彼哼,默認(rèn)用NaN填充对妄,也可以用fill_value確定缺省值,用ffill方法向前填充

In[45]: obj3

Out[45]: 
1    NaN
2    NaN
3    NaN
a    0.0
b    1.0
dtype: float64
  • 用fill_value確定缺省值
In[47]: obj4 = obj.reindex(['1','2','3','a','b'],fill_value = 'Fill_Value')
In[48]: obj4

Out[48]: 
1    Fill_Value
2    Fill_Value
3    Fill_Value
a             0
b             1
dtype: object
  • 使用ffill方法實現(xiàn)向前填充缺省值沪羔,bfill為向后填充
In[49]: obj5 = Series(['A','C','E'],index = [0,2,4])
In[50]: obj5

Out[50]: 
0    A
2    C
4    E
dtype: object

In[51]: obj5.reindex(range(6),method = 'ffill')

Out[51]: 
0    A
1    A
2    C
3    C
4    E
5    E
dtype: object


- DataFrame的reindex的使用


#首先看一下構(gòu)造
In[52]: np.arange(9)
Out[52]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

In[53]: np.arange(9).reshape((3,3))
Out[53]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])


#了解結(jié)構(gòu)之后構(gòu)建DataFrame

In[54]: frame = DataFrame(np.arange(9).reshape((3,3)),index=['a','b','c'],columns=['Ohio','Texas','California'])

In[55]: frame

Out[55]: 
   Ohio  Texas  California
a     0      1           2
b     3      4           5
c     6      7           8

  • 對DataFrame對象進行重新索引

In[59]: frame3 = frame.reindex(['a','c','b','new'])

In[60]: frame3
Out[60]: 
     Ohio  Texas  California
a     0.0    1.0         2.0
c     6.0    7.0         8.0
b     3.0    4.0         5.0
new   NaN    NaN         NaN

  • ix的標(biāo)簽檢索功能饥伊,內(nèi)部參數(shù)傳入注意形式象浑,檢索不到的值用NaN填充

In[61]: frame3.ix[['a','c','new'],['Ohio','NewYork','California']] #利用ix的標(biāo)簽檢索功能
Out[61]: 
     Ohio  NewYork  California
a     0.0      NaN         2.0
c     6.0      NaN         8.0
new   NaN      NaN         NaN

Pay Attention

1.Index對象是不可改變的,用戶不能對其進行修改琅豆,對Index的操作都會產(chǎn)生一個新的Index愉豺,對原來的Index并不修改。比如說茫因,拿一個list來說

list的append方法

In[67]: a = ['1','2','3']
In[68]: a.append('4')
In[69]: a

Out[69]: ['1', '2', '3', '4'] # a已經(jīng)被改變

index的append方法蚪拦,其余方法類似

In[70]: index
Out[70]: Index([u'a', u'b', u'c'], dtype='object')

In[71]: index2
Out[71]: Index([u'd', u'e', u'f'], dtype='object')

In[72]: index.append(index2)
Out[72]: Index([u'a', u'b', u'c', u'd', u'e', u'f'], dtype='object')

In[73]: index
Out[73]: Index([u'a', u'b', u'c'], dtype='object') #可見index并沒有改變,

2.Obj.ix[[],[]...]標(biāo)簽索引功能的使用冻押,舉個栗子

假設(shè)frame是如下

In[75]: frame
Out[75]: 
   Ohio  Texas  California
a     0      1           2
b     3      4           5
c     6      7           8

開始索引

In[77]: frame.ix['a'] #把index為a的索引出來驰贷,構(gòu)成Series

Out[77]: 
Ohio          0
Texas         1
California    2
Name: a, dtype: int32

多條件索引

In[80]: frame.ix['a','California']

Out[80]: 2

致謝

利用python進行數(shù)據(jù)分析.Wes McKinney

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市洛巢,隨后出現(xiàn)的幾起案子括袒,更是在濱河造成了極大的恐慌,老刑警劉巖稿茉,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锹锰,死亡現(xiàn)場離奇詭異,居然都是意外死亡漓库,警方通過查閱死者的電腦和手機恃慧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渺蒿,“玉大人痢士,你說我怎么就攤上這事∶埃” “怎么了怠蹂?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長训唱。 經(jīng)常有香客問我褥蚯,道長,這世上最難降的妖魔是什么况增? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任赞庶,我火速辦了婚禮,結(jié)果婚禮上澳骤,老公的妹妹穿的比我還像新娘歧强。我一直安慰自己,他們只是感情好为肮,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布摊册。 她就那樣靜靜地躺著,像睡著了一般颊艳。 火紅的嫁衣襯著肌膚如雪茅特。 梳的紋絲不亂的頭發(fā)上忘分,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音白修,去河邊找鬼妒峦。 笑死,一個胖子當(dāng)著我的面吹牛兵睛,可吹牛的內(nèi)容都是我干的肯骇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼祖很,長吁一口氣:“原來是場噩夢啊……” “哼笛丙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起假颇,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤胚鸯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后笨鸡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蠢琳,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年镜豹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓝牲。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡趟脂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出例衍,到底是詐尸還是另有隱情昔期,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布佛玄,位于F島的核電站硼一,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏梦抢。R本人自食惡果不足惜般贼,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奥吩。 院中可真熱鬧哼蛆,春花似錦、人聲如沸霞赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽端衰。三九已至叠洗,卻和暖如春甘改,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灭抑。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工十艾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人名挥。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓疟羹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親禀倔。 傳聞我的和親對象是個殘疾皇子榄融,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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