iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
1
AI & Data

Machine Learning for Dummies系列 第 17

[Day 17] Hello Pandas (2)

  • 分享至 

  • xImage
  •  

昨天的文章介紹了在 Pandas 當中的第一種資料型態:Series,今天要緊接著介紹另外一個重要的資料型態 DataFrame

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 之間的隨機整數,這個相信看過前幾天文章的大家應該不陌生。後面我們為這個二維陣列加上了 indexcolumns 的值。

印出來的結果如下:

   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

Imgur

選取特定 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

Imgur

選取特定 columns & rows

這時候我們就要用到 .loc 的方法,譬如

x.loc['c':'d', ['C', 'D']]

就會得到 columns 為 CD、rows 為 cd 的資料!

Imgur

或者我們可以用 .iloc[] 的方法,輸入資料的位置來讀取資料。譬如

x.iloc[2:4, 0:2]

代表我們要抓第 3-4 列、第 1-2 欄的資料

Imgur

數學計算

這裡跟 NumPy 很像,我們可以直接把 DataFrame 進行數學計算,譬如我們可以把 DataFrame 裡面的數值變成 1/10

x = x / 10

然後加上另外一個 columns、rows 和 x 一樣的 DataFrame y

x + y

Imgur

但是這裡因為有給定 index 和 columns,因此如果兩個 DataFrame 的 index 和 columns 對不上的話,就會出現 NaN。(這裡就不會有 NumPy 的 "broadcasting" 效果)

新增 column or row

若要新增一個 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]

Imgur

刪除 column or row

要刪除 column 或是 row,可以用 .drop() 這個方法做到

x. drop(columns=['B', 'D'])

刪除 column BD

x.drop(index=['c','e','f'])

刪除 row c, e, f

Imgur

如果要刪除特定位置的值...

那我們可以直接指定位置,讓那個位置的值變成是 0

x.iloc[0:1,0:1] = 0

關於 DataFrame 今天就先介紹到這邊,明天我們將繼續探索 Pandas 更多的功能!


上一篇
[Day 16] Hello Pandas (1)
下一篇
[Day 18] Hello Pandas (3)
系列文
Machine Learning for Dummies30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
SK.
iT邦新手 5 級 ‧ 2024-04-25 10:34:04

選取特定 rows 程式有誤喔,是a到c

我要留言

立即登入留言