pandas

from pandas import Series, DataFrame

import pandas as pd

Series

obj = Series([4,7,-5,3])

obj2 = Series([4,7,-5,3],index = ['a','b','c','d'])

sdata = {'Ohio':35000, 'Texas':71000, 'Oregon':16000, 'Utah': 5000}

obj3 = Series(sdata)

如果只傳入一個字典橘荠,則結(jié)果Series中的索引就是原字典的鍵纲岭。

states = ['California','Ohio', 'Oregon', 'Texas']
obj4 = Series(sdata, index = states)

pandas中的缺失用NaN來表示,

pd.isnull(obj4)
pd.notnull(obj4)

obj4.isnull()
obj4.name = 'population'
obj4.index.name = 'state'

Series的索引可以通過賦值的方式就地修改

DataFrame

構(gòu)建DataFrame

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

frame = DataFrame(data) #自動加上索引

可以指定列序列順序

frame = DataFrame(data,columns = ['year', 'state', 'pop'])

可以指定行的索引

frame = DataFrame(data,columns = ['year','state', 'pop'],index = ['one', 'two', 'three', 'four','five',])

如果傳入的列在數(shù)據(jù)中找不到,就會產(chǎn)生NA值

frame = DataFrame(data,columns = ['year','state','pop','debt'])

獲取列序列

frame.columns

列索引

frame['state']
frame.year

行索引

frame.ix['three']

列可以通過賦值的方式進(jìn)行修改,數(shù)組賦值時長度必須一致廷区,如果賦值的是一個Series稽揭,就會精確到索引,所有的空位會填上缺失值。

frame.debt = 16.8

不存在的列賦值會創(chuàng)建新的列

關(guān)鍵字del 用于刪除列

另一種構(gòu)建數(shù)據(jù)的形式叫嵌套字典

pop = {
'Nevada': {2001:2.4,2002:2.9},
'Ohio': {2000:1.5,2001:1.7,2002:3.6}
}

frame3 = DataFrame(pop)

可以進(jìn)行轉(zhuǎn)置

frame3.T

可以為DataFrame設(shè)置index and columns 的 name

frame3.index.name = 'year'
frame3.columns.name = 'state'

索引對象

index #不可修改
index = pd.Index(np.arange(3))

Index對象的主要類別和方法和屬性查看p126

Series和DataFrame的基本功能

重新索引

obj = Series([4.5,7.2,-5.3,3.6],index = ['b', 'c', 'a', 'd'])
obj2 = obj.reindex(['a','b','c','d','e'])

當(dāng)重新索引時不存在吼拥,就會引入缺失值,也可以填入默認(rèn)值

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

除了填入默認(rèn)值fill_value, 其他的method,包括ffill或pad向前填充值,bfill或backfill向后填充值

obj3 = Series('blue','green', 'yellow',index =[0,2,4])
obj3.reindex(range(6),method = 'ffill')

使用reindex()可以重新索引行线衫,使用colunms關(guān)鍵字可以重新索引列:

obj3.reindex(columns = ['Texas', 'Utah', 'California'])

行和列可以同時重新索引:

obj3.reindex(index = [],method = 'ffill', columns = [])

利用ix的索引標(biāo)簽功能可以達(dá)到相同的功能:

obj3.ix(['a','b','c','d'],['Texas','Utah','California'])

reindex的一些參數(shù):

index

method

limit 前向或者后向填充時的最大填充量

level ...

copy ...

columns

丟棄指定軸上的項

drop方法返回的是一個在指定軸上刪除了指定值的新對象

obj = Series(np.arange(5), index = ['a','b','c','d','e'])
obj_new = obj.drop('c')
obj_new = obj.drop(['c','d'])

對于DataFrame,可以刪除任意軸上的索引值:

data = DataFrame(np.arange(16).reshape(4,4),index = ['Ohio', 'California', 'Utah', 'New York'],
columns = [1,2,3,4])

data.drop('Ohio')
data.drop(['Ohio','New York'])
data.drop('Ohio',axis = 0)
data.drop(1,axis = 1)
data.drop([1,2],axis = 1)

索引凿可、選取和過濾

Series的索引

obj = Series(np.arange(4.),index = ['a','b','c','d'])
obj['a']
obj[1]
obj[2:4]
obj[['a','c','d']]
obj[obj > 1]

注意,切片運算obj[1:2]包括2授账,obj['a':'c']包括'c'

Series的賦值

obj['a':'c'] = 5

DataFrame的索引

data = DataFrame(np.arange(16).reshape(4,4),index = ['Ohio','Colorado', 'Utah','New York'],
columns = [1,2,3,4])

單索引獲取的是列

data[1]
data[[1,2]]

通過切片或者布爾型選取行

data[:2]
data[data[3]>5]

通過布爾型DataFrame進(jìn)行索引:

data < 5

data[data < 5] = 0

對行進(jìn)行標(biāo)簽索引枯跑,可以使用ix

data.ix[2]
data.ix['Colorado',[1,2]]
data.ix[['Colorado','Utah'],[3,0,1]]

DataFrame的索引匯總

obj[val] 選取單個列或一組列

obj.ix[val] 選取單個行或者一組行

obj.ix[:,val] 選取單個列或列子集

obj.ix[val1,val2] 同時選取列和行

reindex

xs方法 根據(jù)標(biāo)簽選取單行和單列,并返回一個Series

icol,irow ...

get_value, set_value 根據(jù)行標(biāo)簽和列標(biāo)簽選取單個值

算術(shù)運算和數(shù)據(jù)對齊

對象相加時獲得是并集

s1 = Series([1,2,3,4,5],index = ['a', 'c', 'd', 'e','f'])
s2 = Series([2,3,4,5,6], index = ['a','b','c','d','e'])

s1+ s2

a 3.0
b NaN
c 6.0
d 8.0
e 10.0
f NaN
dtype: float64

自動的數(shù)據(jù)對齊操作在不重疊的索引處引入NA值白热。

缺失值會在算數(shù)運算中傳播

對于DataFrame來說敛助,行和列上的對齊操作同時發(fā)生

使用add算術(shù)加時用fill_value可以避免引入NA值

df1 = DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd'))
df2 = DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde'))

df2+ df1
a b c d e
0 0.0 2.0 4.0 6.0 NaN
1 9.0 11.0 13.0 15.0 NaN
2 18.0 20.0 22.0 24.0 NaN
3 NaN NaN NaN NaN NaN
df1.add(df2,fill_value = 0)
a b c d e
0 0.0 2.0 4.0 6.0 4.0
1 9.0 11.0 13.0 15.0 9.0
2 18.0 20.0 22.0 24.0 14.0
3 15.0 16.0 17.0 18.0 19.0

靈活額算術(shù)方法

add()
sub()
div()
mul()

DataFrame與Series之間的運算

默認(rèn)情況下,DataFrame與Series之間的算術(shù)運算會將Series的索引匹配到DataFrame的列屋确,然后沿著行一致向下廣播纳击。

如果某個索引值在DataFrame的列或Series的索引中找不到,則參與運算的兩個對象就會被重新索引形成并集攻臀。

如果要匹配行且在列上廣播焕数,必須使用算術(shù)運算方法

frame.sub(series,axis = 0)

函數(shù)應(yīng)用和映射

frame = DataFrame(np.random.randn(4,3),columns = list('bde'),index = ['Utah', 'Ohio', 'Texas', 'Oregon'])

np.abs(frame)

f = lambda x: x.max() - x.min()

frame.apply(f)

np.mean(frame,axis = 1)
np.sum(frame,axis = 1)

def f(x):
return Series([x.min(),y.max()],index=['min','max'])

frame.apply(f)

format = lambda x: '%.2f' % x

frame.applymap(format)

排序和排名

obj = Series(range(4), index=['b','c','d','a'])
obj.sort_index()

對于DataFrame來說可以對任意軸進(jìn)行排序

frame = DataFrame(np.arange(8).reshape(2,4),index = ['One','Two'], columns = ['a','c','b','d'])

frame.sort_index(axis = 0)# 表示對行標(biāo)簽進(jìn)行索引
frame.sort_index(axis = 1) # 表示對列標(biāo)簽進(jìn)行索引

sort_index默認(rèn)是升序排序的,也可以降序排序茵烈,關(guān)鍵字ascending = False

frame.sort_index(axis = 1, ascending = False)

按值來進(jìn)行排序可以用order() ############存在問題

obj = Series(np.random.randn(5))

frame = DataFrame({'b':[4,7,-3,2], 'a':[0,1,0,1]})
frame.sort_index(by = 'b')
frame.sort_index(by = ['a', 'b'])

排名ranking

obj = Series([7,-5,7,4,2,0,4])
obj.rank()
obj = Series([7,-5,7,4,2,0,4])
obj.rank()
0 6.5
1 1.0
2 6.5
3 4.5
4 3.0
5 2.0
6 4.5
dtype: float64
obj.rank(method = 'first')
0 6.0
1 1.0
2 7.0
3 4.0
4 3.0
5 2.0
6 5.0
dtype: float64
obj.rank(method = 'max')
0 7.0
1 1.0
2 7.0
3 5.0
4 3.0
5 2.0
6 5.0
dtype: float64
obj.rank(method = 'max',ascending = False)
0 2.0
1 7.0
2 2.0
3 4.0
4 5.0
5 6.0
6 4.0
dtype: float64
obj.rank(method = 'min')
0 6.0
1 1.0
2 6.0
3 4.0
4 3.0
5 2.0
6 4.0
dtype: float64
obj.rank(method = 'average')#默認(rèn)

帶有重復(fù)值的軸索引

obj = Series(range(5),index = ['a','a','b','b','c'])
obj.index.is_unique#index的值是否唯一

obj['a']
obj['c']

對于DataFrame來說也一樣

匯總和計算描述統(tǒng)計

df = DataFrame([[1.4,np.nan],[7.2,-4.2],[np.nan,np.nan],[0.75,-1.3]],index = ['a','b','c','d'],columns = ['one','two'])

df.sum()#所有的行求sum
df.sum(axis = 1) # 所有的列求sum

注意 NA值會自動被排除百匆,除非整個切片都是NA值,

df.mean(axis = 1, skipna = False)

約簡方法的常用選項

axis 約簡的軸呜投,行用0加匈,列用1

skipna 排除缺失值,默認(rèn)值為True

level ...

df.idxmax()
df.idxmin()# 達(dá)到最大值或最小值的索引

df.cumsum()# 累加

df.describe() # 一次性產(chǎn)生多個匯總統(tǒng)計
one two
count 3.000000 2.00000
mean 3.116667 -2.75000
std 3.551174 2.05061
min 0.750000 -4.20000
25% 1.075000 -3.47500
50% 1.400000 -2.75000
75% 4.300000 -2.02500
max 7.200000 -1.30000

對于非數(shù)值型數(shù)據(jù)仑荐,describe會產(chǎn)生另外一種匯總統(tǒng)計:

obj = Series(['a','b','c','d'] * 4)
obj.describe()
count 16
unique 4
top b
freq 4
dtype: object
obj.describe()
count 16.000000
mean 2.500000
std 1.154701
min 1.000000
25% 1.750000
50% 2.500000
75% 3.250000
max 4.000000
dtype: float64

其他的統(tǒng)計匯總詳見P114

相關(guān)系數(shù)和協(xié)方差 ---------------未完備-----------------

from pandas_datareader import data as web
all_data = {}
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOD']:
all_data[ticker] = web.get_data_yahoo(ticker,'1/1/2000','1/1/2010')
price = DataFrame({tic: data['Adj Close'] for tic,data in all_data.iteritems()})
volume = DataFrame({tic: data['Volume'] for tic,data in all_data.iteritems()})

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雕拼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子粘招,更是在濱河造成了極大的恐慌啥寇,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洒扎,死亡現(xiàn)場離奇詭異辑甜,居然都是意外死亡,警方通過查閱死者的電腦和手機袍冷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門磷醋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胡诗,你說我怎么就攤上這事邓线√视眩” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵骇陈,是天一觀的道長震庭。 經(jīng)常有香客問我,道長你雌,這世上最難降的妖魔是什么器联? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮匪蝙,結(jié)果婚禮上主籍,老公的妹妹穿的比我還像新娘。我一直安慰自己逛球,他們只是感情好千元,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颤绕,像睡著了一般幸海。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奥务,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天物独,我揣著相機與錄音,去河邊找鬼氯葬。 笑死挡篓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帚称。 我是一名探鬼主播官研,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闯睹!你這毒婦竟也來了戏羽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤楼吃,失蹤者是張志新(化名)和其女友劉穎始花,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孩锡,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡酷宵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了躬窜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忧吟。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖斩披,靈堂內(nèi)的尸體忽然破棺而出溜族,到底是詐尸還是另有隱情,我是刑警寧澤垦沉,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布煌抒,位于F島的核電站,受9級特大地震影響厕倍,放射性物質(zhì)發(fā)生泄漏寡壮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一讹弯、第九天 我趴在偏房一處隱蔽的房頂上張望况既。 院中可真熱鬧,春花似錦组民、人聲如沸棒仍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莫其。三九已至,卻和暖如春耸三,著一層夾襖步出監(jiān)牢的瞬間乱陡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工仪壮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留憨颠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓积锅,卻偏偏與公主長得像爽彤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乏沸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

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