對(duì)于Python而言,坊間早有這種說(shuō)法:在有了 pandas之后,Python才算有了數(shù)據(jù)分析的能力。在此之前,要想用Python來(lái)做數(shù)據(jù)分析,可能就沒(méi)那么友好了,可見(jiàn)pandas在學(xué)習(xí)數(shù)據(jù)分析時(shí)候的重要程度。對(duì)于 pandas來(lái)說(shuō),很多功能的實(shí)現(xiàn)也是要基于科學(xué)計(jì)算庫(kù) numpy的,所以 numpy+ pandas的組合在Python數(shù)據(jù)分析中就顯得尤為關(guān)鍵。
從本篇開(kāi)始,小編就給大家詳細(xì)講解 pandas的基本用法和應(yīng)用案例,熟悉R的朋友們也可以將其與R的數(shù)據(jù)分析功能進(jìn)行對(duì)比,定能有所收獲。本篇先對(duì) pandas的數(shù)據(jù)結(jié)構(gòu)進(jìn)行介紹,跟R大不相同的是,Python并沒(méi)有太多不同的數(shù)據(jù)結(jié)構(gòu)和對(duì)象, pandas中主要包括 Series和 DataFrame兩種數(shù)據(jù)結(jié)構(gòu)。
Series
Series有點(diǎn)類似于 numpy中的一維數(shù)組對(duì)象,一般由一組數(shù)據(jù)和數(shù)據(jù)相關(guān)的標(biāo)簽或者索引構(gòu)成,由一組數(shù)構(gòu)成最簡(jiǎn)單的 Series如下:
from numpy import *
from pandas import *
創(chuàng)建 Series:
obj = Series([-1,3,-4,6])
print(obj)
0 -1
1 3
2 -4
3 6
dtype: int64
可以看到的是,由一組數(shù)創(chuàng)建的 Series對(duì)象索引在左邊,值在右邊。我們也可以通過(guò)索引和值標(biāo)簽分別訪問(wèn)相應(yīng)的對(duì)象:
#Series對(duì)象值
obj.values
array([-1, 3, -4, 6], dtype=int64)
#Series對(duì)象索引
obj.index
RangeIndex(start=0, stop=4, step=1)
當(dāng)然,我們可以在創(chuàng)建Series對(duì)象的時(shí)候就對(duì)索引進(jìn)行標(biāo)記或者命名:
#對(duì)Series索引進(jìn)行命名或者標(biāo)記
obj2 = Series([-1,3,-4,6],index = ['a','b','c','d'])
print(obj2)
a -1
b 3
c -4
d 6
dtype: int64
#查看索引
obj2.index
Index(['a', 'b', 'c', 'd'], dtype='object')
根據(jù) Series索引訪問(wèn)對(duì)象值:
obj2['a']
-1
obj2[['a','b','c']]
a -1
b 3
c -4
dtype: int64
也可以對(duì)Series對(duì)象進(jìn)行數(shù)組運(yùn)算:
obj2[obj2 > 0]
b 3
d 6
dtype: int64
obj2*2
a -2
b 6
c -8
d 12
dtype: int64
np.exp(obj2)
a 0.367879
b 20.085537
c 0.018316
d 403.428793
dtype: float64
除了直接以數(shù)組形式創(chuàng)建 Series對(duì)象之外,通過(guò)字典來(lái)生成 Series也是較為普遍的做法:
nba = {'Kobe Bryant':30.3,'Allen Iverson':29.4,'Tracy McGrady':30.1,'Vince Carter':25.6}
obj3 = Series(nba)
print(obj3)
AllenIverson 29.4
KobeBryant 30.3
TracyMcGrady 30.1
VinceCarter 25.6
dtype: float64
創(chuàng)建完之后可以對(duì) Series對(duì)象和索引進(jìn)行命名:
obj3.name = 'nbastats'
obj3.index.name = 'player'
print(obj3)
player
AllenIverson 29.4
KobeBryant 30.3
TracyMcGrady 30.1
VinceCarter 25.6
Name: nbastats, dtype: float64
另外, Series索引可以隨時(shí)進(jìn)行更改:
obj3.index = ['A.Iverson','K.Bryant','T.McGrady','V.Carter']
print(obj3)
A.Iverson 29.4
K.Bryant 30.3
T.McGrady 30.1
V.Carter 25.6
Name: nbastats, dtype: float64
除了上述創(chuàng)建 Series對(duì)象的方法以外,從 DataFrame中單獨(dú)拿出一行也可以用來(lái)創(chuàng)建 Series。關(guān)于 Series數(shù)據(jù)結(jié)構(gòu)的基本內(nèi)容就介紹到這里,下面看 DataFrame。
DataFrame
說(shuō)到 DataFrame,可能大家更熟悉的是R語(yǔ)言中的 data.frame,Python中的 DataFrame跟它也較為類似。在Python中, DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列的數(shù)據(jù)類型可以不一樣,與R中的數(shù)據(jù)框相比,Python中的 DataFrame行列操作較為平衡。 構(gòu)建DataFrame方法很多,最常用的是直接傳入一個(gè)由等長(zhǎng)列表或NumPy數(shù)組組成的字典:
data = {'city':['LAL','HOU','PHI','TOR'],
'year':[1996,1997,1996,1997],
'score':[30.3,30.1,29.4,25.6]}
frame = DataFrame(data)
frame
city score year
0 LAL 30.3 1996
1 HOU 30.1 1997
2 PHI 29.4 1996
3 TOR 25.6 1997
可以看到,字典在轉(zhuǎn)化為數(shù)據(jù)框的過(guò)程中,鍵是作為列名而存在的。
#按指定列進(jìn)行排列
DataFrame(data,columns=['year','city','score'])
year city score
0 1996 LAL 30.3
1 1997 HOU 30.1
2 1996 PHI 29.4
3 1997 TOR 25.6
根據(jù)字典傳入時(shí),若是指定列找不到數(shù)據(jù)則會(huì)自動(dòng)填補(bǔ)為缺失:
#若傳入的列找不到數(shù)據(jù)則會(huì)產(chǎn)生NA
frame2 = DataFrame(data,columns=['year','city','score','assist'],
index=[1,2,3,4])
print(frame2)
year city score assist
11996 LAL 30.3 NaN
21997 HOU 30.1 NaN
31996 PHI 29.4 NaN
41997 TOR 25.6 NaN
如前述,我們可以通過(guò) data.frame來(lái)獲取一個(gè) Series對(duì)象:
frame2['city']
1 LAL
2 HOU
3 PHI
4 TOR
Name: city, dtype: object
frame2.score
1 30.3
2 30.1
3 29.4
4 25.6
Name: score, dtype: float64
也可以通過(guò) loc方法訪問(wèn) DataFrame的行:
frame2.loc[3]
year 1996
city PHI
score 29.4
assist NaN
Name: 3, dtype: object
對(duì)缺失的變量進(jìn)行重新賦值:
frame2['assist']=5.6
print(frame2)
year city score assist
11996 LAL 30.3 5.6
21997 HOU 30.1 5.6
31996 PHI 29.4 5.6
41997 TOR 25.6 5.6
按索引傳入時(shí),沒(méi)有被指定的記錄產(chǎn)生缺失:
val = Series([4.5,3.9],index=[1,4])
frame2['assist']=val
print(frame2)
year city score assist
11996 LAL 30.3 4.5
21997 HOU 30.1 NaN
31996 PHI 29.4 NaN
41997 TOR 25.6 3.9
對(duì)于嵌套字典轉(zhuǎn)化為 DataFrame,一般外層字典的鍵作為列,內(nèi)層字典的鍵作為行索引:
nba = {'kobe':{2005:35.6,2006:32.1},'McGrady':{2005:26.7,2006:24.3}}
frame3 = DataFrame(nba)
print(frame3)
McGrady kobe
2005 26.735.6
2006 24.332.1
關(guān)于pandas的兩種基本數(shù)據(jù)結(jié)構(gòu)Series和DataFrame,小編就暫且介紹到這里了,關(guān)于如何在實(shí)際的數(shù)據(jù)分析過(guò)程熟練使用這兩種數(shù)據(jù)結(jié)構(gòu)的基本操作,小編在后續(xù)的推文中會(huì)進(jìn)一步的講解。
-
數(shù)據(jù)分析
+關(guān)注
關(guān)注
2文章
1445瀏覽量
34050 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84627
原文標(biāo)題:利用pandas進(jìn)行數(shù)據(jù)分析(一):Series和DataFrame數(shù)據(jù)結(jié)構(gòu)
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論