在昨天的文章介紹了在 Pandas 當中的第一種資料型態:Series,今天要緊接著介紹另外一個重要的資料型態 DataFrame
有別於一維陣列的 Series,DataFrame 是個二維的資料結構,就很像是 Excel 裡面的 Columns/Rows 的結構
讓我們來創造第一個 Pandas 的 DataFrame
import numpy as np
import pandas as pd
x = pd.DataFrame(np.random.randint(0,10, (6, 4)), index=['a','b','c','d','e','f'], columns=['A','B','C','D'])
print(x)
在 pd.DataFrame()
當中,可以看到我們建立了一個 6x4 的二維陣列,其值為 0~10 之間的隨機整數,這個相信看過前幾天文章的大家應該不陌生。後面我們為這個二維陣列加上了 index
與 columns
的值。
印出來的結果如下:
A B C D
a 1 0 4 4
b 6 9 3 8
c 6 8 0 6
d 9 5 6 6
e 2 2 4 7
f 8 6 6 1
是不是有種回到 Excel 熟悉的感覺呢?(比 NumPy 的二維陣列好看多了)
當我們建立好第一份資料之後,接下來就會想知道我們可以怎麼操作這些資料。首先先從選取資料開始
選取前三筆資料
x.head(3)
#result
A B C D
a 0 8 3 9
b 1 0 8 5
c 7 8 2 3
選取最後兩筆資料
x.tail(2)
#result
A B C D
e 9 6 6 1
f 3 2 3 6
選取特定 column
如果要選取 A 欄當中的所有資料,可以很直覺的用
x['A']
來選取,會得到
a 0
b 1
c 7
d 3
e 9
f 3
我們會看到 index 都還在喔
選取特定 rows
如果要選取第 1 到 3 列的資料,可以用 index 來選取
x['c':'d']
會得到
#result
A B C D
a 0 8 3 9
b 1 0 8 5
c 7 8 2 3
選取特定 columns & rows
這時候我們就要用到 .loc
的方法,譬如
x.loc['c':'d', ['C', 'D']]
就會得到 columns 為 C
和 D
、rows 為 c
和 d
的資料!
或者我們可以用 .iloc[]
的方法,輸入資料的位置來讀取資料。譬如
x.iloc[2:4, 0:2]
代表我們要抓第 3-4 列、第 1-2 欄的資料
這裡跟 NumPy 很像,我們可以直接把 DataFrame 進行數學計算,譬如我們可以把 DataFrame 裡面的數值變成 1/10
x = x / 10
然後加上另外一個 columns、rows 和 x 一樣的 DataFrame y
x + y
但是這裡因為有給定 index 和 columns,因此如果兩個 DataFrame 的 index 和 columns 對不上的話,就會出現 NaN。(這裡就不會有 NumPy 的 "broadcasting" 效果)
若要新增一個 column,我們可以先建立一個 Series,設定好 index。最後像是用新增物件中的元素的方式,新增一個新的 column
newColumn = pd.Series([3.14, 3.14, 3.14, 3.14, 3.14, 3.14], index=['a','b','c','d','e','f'])
x['E'] = newColumn
若要新增一個 row,則可以
x.loc['g'] = [2.71, 2.71, 2.71, 2.71, 2.71]
要刪除 column 或是 row,可以用 .drop()
這個方法做到
x. drop(columns=['B', 'D'])
刪除 column B
和 D
x.drop(index=['c','e','f'])
刪除 row c
, e
, f
那我們可以直接指定位置,讓那個位置的值變成是 0
x.iloc[0:1,0:1] = 0
關於 DataFrame 今天就先介紹到這邊,明天我們將繼續探索 Pandas 更多的功能!