對于Python而言,坊間早有這種說法:在有了 pandas之后,Python才算有了數(shù)據(jù)分析的能力。在此之前,要想用Python來做數(shù)據(jù)分析,可能就沒那么友好了,可見pandas在學習數(shù)據(jù)分析時候的重要程度。對于 pandas來說,很多功能的實現(xiàn)也是要基于科學計算庫 numpy的,所以 numpy+ pandas的組合在Python數(shù)據(jù)分析中就顯得尤為關鍵。
從本篇開始,小編就給大家詳細講解 pandas的基本用法和應用案例,熟悉R的朋友們也可以將其與R的數(shù)據(jù)分析功能進行對比,定能有所收獲。本篇先對 pandas的數(shù)據(jù)結構進行介紹,跟R大不相同的是,Python并沒有太多不同的數(shù)據(jù)結構和對象, pandas中主要包括 Series和 DataFrame兩種數(shù)據(jù)結構。
Series
Series有點類似于 numpy中的一維數(shù)組對象,一般由一組數(shù)據(jù)和數(shù)據(jù)相關的標簽或者索引構成,由一組數(shù)構成最簡單的 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對象索引在左邊,值在右邊。我們也可以通過索引和值標簽分別訪問相應的對象:
#Series對象值
obj.values
array([-1, 3, -4, 6], dtype=int64)
#Series對象索引
obj.index
RangeIndex(start=0, stop=4, step=1)
當然,我們可以在創(chuàng)建Series對象的時候就對索引進行標記或者命名:
#對Series索引進行命名或者標記
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索引訪問對象值:
obj2['a']
-1
obj2[['a','b','c']]
a -1
b 3
c -4
dtype: int64
也可以對Series對象進行數(shù)組運算:
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對象之外,通過字典來生成 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)建完之后可以對 Series對象和索引進行命名:
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索引可以隨時進行更改:
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對象的方法以外,從 DataFrame中單獨拿出一行也可以用來創(chuàng)建 Series。關于 Series數(shù)據(jù)結構的基本內容就介紹到這里,下面看 DataFrame。
DataFrame
說到 DataFrame,可能大家更熟悉的是R語言中的 data.frame,Python中的 DataFrame跟它也較為類似。在Python中, DataFrame是一個表格型的數(shù)據(jù)結構,它含有一組有序的列,每列的數(shù)據(jù)類型可以不一樣,與R中的數(shù)據(jù)框相比,Python中的 DataFrame行列操作較為平衡。 構建DataFrame方法很多,最常用的是直接傳入一個由等長列表或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
可以看到,字典在轉化為數(shù)據(jù)框的過程中,鍵是作為列名而存在的。
#按指定列進行排列
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ù)據(jù)則會自動填補為缺失:
#若傳入的列找不到數(shù)據(jù)則會產(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
如前述,我們可以通過 data.frame來獲取一個 Series對象:
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
也可以通過 loc方法訪問 DataFrame的行:
frame2.loc[3]
year 1996
city PHI
score 29.4
assist NaN
Name: 3, dtype: object
對缺失的變量進行重新賦值:
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
按索引傳入時,沒有被指定的記錄產(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
對于嵌套字典轉化為 DataFrame,一般外層字典的鍵作為列,內層字典的鍵作為行索引:
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
關于pandas的兩種基本數(shù)據(jù)結構Series和DataFrame,小編就暫且介紹到這里了,關于如何在實際的數(shù)據(jù)分析過程熟練使用這兩種數(shù)據(jù)結構的基本操作,小編在后續(xù)的推文中會進一步的講解。
-
數(shù)據(jù)分析
+關注
關注
2文章
1464瀏覽量
34355 -
python
+關注
關注
56文章
4813瀏覽量
85314
原文標題:利用pandas進行數(shù)據(jù)分析(一):Series和DataFrame數(shù)據(jù)結構
文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
Python的列表和元組兩種數(shù)據(jù)結構區(qū)別差異分析

盤點幾種常見的數(shù)據(jù)結構

數(shù)據(jù)結構
數(shù)據(jù)結構是什么_數(shù)據(jù)結構有什么用

java中幾種常用數(shù)據(jù)結構

為什么要學習數(shù)據(jù)結構?數(shù)據(jù)結構的應用詳細資料概述免費下載

什么是數(shù)據(jù)結構?為什么要學習數(shù)據(jù)結構?數(shù)據(jù)結構的應用實例分析

數(shù)據(jù)結構解決滑動窗口問題

Linux內核中使用的數(shù)據(jù)結構

評論