pandas,也有人稱它為Python界的Excel試算表,pandas在某個程度上填補了Python在資料分析及建模上的缺口,它結合NumPy(Numerical Python的簡稱)的特性,以及試算表和關連式資料庫(SQL)的資料操作能力,可以用來對資料進行重構、切割、聚合及選擇子集合等操作。
透過pandas套件的使用,你可以比單純使用Python輕鬆的完成資料分析的工作,並可以讓你快速的發現資料中的資訊以及其中蘊藏的意義。
有時候,使用pandas時也可能會用到其他的Python 程式庫。例如與數值與科學運算有關的SciPy以前面提過的NumPy,與統計分析有關的StatsModels,與機器學習有關的 scikit-learn,與資料視學化有關的 matplotlib 及 seaborn 等等。
嚴格來說,pandas不算是資料科學的工具。
精確的來說,pandas是資料科學分析工具前階段的工具。你可以藉由它敲開資料科學領域的大門。
Pandas Series序列
序列(Series)是一個像是一維陣列資料所組成的物件。我們可以利用python的串列(list)建立一個序列(Series):
在pandas裡面,最重要的兩個基本資料結構就屬Series與DataFrame了。要暸解pandas,一定不可以不知道這兩個的概念。
Series,是一個一維標籤陣列物件。
DataFrame則是一個以表格、欄位為主的資料結構,有行與列標籤。接下來我們要簡單介紹這兩個概念。
- s = pd.Series([1, 2, 3, 4])
複製代碼 s = pd.Series(list("abcdef"), index=[49, 48, 47, 0, 1, 2])
49 a
48 b
47 c
0 d
1 e
2 f
>>> s.loc[0] # value at index label 0
'd'
>>> s.iloc[0] # value at index location 0
'a'
>>> s.loc[0:1] # rows at index labels between 0 and 1 (inclusive)
0 d
1 e
>>> s.iloc[0:1] # rows at index location between 0 and 1 (exclusive)
49 a
- df = pd.read_excel('檔案名稱')
複製代碼
Pandas DataFrame資料框
pandas的基本結構是DataFrame,DataFrame是一個二維的資料結構,有行有列,有點像excel試算表中的儲存表格。每個欄位可以是不同的資料型態,例如數字、字串、布林等。你也可以把DataFrame想像成是裝了很多Series物件的字典,而且每個Series物件使用相同的index。
建立DataFrame
建立DataFrame的方法有很多種。你可以用串列list建立,也可以用字典dict建立,或者是使用前面提到的Numpy來建立。
載入資料
DataFrame在更多的使用情境上,常常是先讀取外部的檔案後,再透過pandas進行資料的分析處理。pandas提供了簡單的語法讓我們可以快速的載入資料。包括csv、excel、sql、json、 html等,甚至於可以透過剪貼簿讀取資料:
如上表,如果你想要載入excel檔案,可以這樣寫:- df = pd.read_excel('檔案名稱')
複製代碼
操作DataFrame
# head()
如果資料太長,我們可以使用head()方法來選取資料開頭前幾個row。預設是五個row。如果你覺得五個row太長,可以試著輸入數字,例如head(3)就是顯示三行的意思。gia, Cambria, "]如果資料太長,我們可以使用head()方法來選取資料開頭前幾個row。預設是五個row。如果你覺得五個row太長,可以試著輸入數字,例如head(3)就是顯示三行的意思。# 調整欄位順序
如果將欄位以序列方法指定的話,DataFrame就會按照指定的順序排好。要達到這個效果,可以使用columns來指定欄位的順序。
# 取回資料
DataFrame可以用類似dict的方法來取回資料。取回資料的資料型態是Series。也可以透過loc屬性取回資料。透過loc屬性取資料時,需要指定位置或名稱。除了使用loc屬性外,也可以使用iloc取回資料。
>>> df = pd.DataFrame(np.arange(25).reshape(5, 5),
index=list('abcde'),
columns=['x','y','z', 8, 9])
>>> df
x y z 8 9
a 0 1 2 3 4
b 5 6 7 8 9
c 10 11 12 13 14
d 15 16 17 18 19
e 20 21 22 23 24
>>> df.iloc[:df.index.get_loc('c') + 1, :4]
x y z 8
a 0 1 2 3
b 5 6 7 8
c 10 11 12 13
get_loc() is an index method meaning "get the position of the label in this index". Note that since slicing with iloc is exclusive of its endpoint, we must add 1 to this value if we want row 'c' as well.
# 儲存資料
pandas讓我們可以快速的透過下面語法儲存資料。
|