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有哪些方法
- 構(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著