Pandas 是強大的資料科學分析工具,結合前幾天所學的NumPy特性
提供方便讀取及使用的資料結構
來處理關聯式數據和有標籤的數據
上一章介紹了Series的概念
今天要進行延伸的學習
分成兩部分:
看的課程是Coursera上的 Introduction to Data Science in Python
Coursera | Online Courses & Credentials From Top Educators. Join for Free | Coursera
練習是利用影片教的還有以前在學校教過的
重新整理有關Series的筆記
Pandas裡可以透過標籤或是索引值來取得特定欄位的數值
若是要透過標籤的話是使用.loc( )
若是要透過索引值的話是使用.iloc( )
(記得索引值是從0開始的)
music_chart = {"Ed Sheeran":"Bad habits", "Justin Biber": "STAY","Cardie B":"Rumors","Anne-Maire":"Kiss My"}
m_c = pd.Series(music_chart)
m_c
'''
Ed Sheeran Bad habits
Justin Biber STAY
Cardie B Rumors
Anne-Maire Kiss My
dtype: object
'''
m_c.iloc[0]
如果我們想用索引值找出"Bad habits" 這首歌
m_c.iloc[0]
'''
'Bad habits'
'''
Series 也支援的切片的功能: .iloc[索引值起點:索引值結束點]
m_c.iloc[1:]
'''
Justin Biber STAY
Cardie B Rumors
Anne-Maire Kiss My
dtype: object
'''
如果我們想用標籤找出Justin Biber唱的歌
m_c.loc["Justin Biber"]
'''
'STAY'
'''
提取多筆不連續的資料可以透過指定多筆數字的索引值或標籤
使用loc.( )
也可以使用來取代指定index原本的value
m_c.loc["Ed Sheeran", "Justin Biber"] = ["Visiting Hours", "Ghost"]
m_c
'''
Ed Sheeran Visiting Hours
Justin Biber Ghost
Cardie B Rumors
Anne-Maire Kiss My
dtype: object
'''
可以看到原本的Bad habits被Visiting Hours取代掉, STAY被Ghost取代掉
刪除 Series 内的資料,使用.drop(labels=" ")
m_c.drop(labels=["Cardie B", "Justin Biber"])
'''
Ed Sheeran Visiting Hours
Anne-Maire Kiss My
dtype: object
'''
import numpy as np
#產生偶數
even_num = np.arange(2,11,2)
print("even:",even_num)
#產生亂數 Series
import numpy as np
rand_array = np.random.randint(0,1000,10)
print("random:",rand_array)
'''
even: [ 2 4 6 8 10]
random: [571 217 128 954 472 651 606 122 903 407]
'''
#變成Series
pd.Series(rand_array)
'''
0 571
1 217
2 128
3 954
4 472
5 651
6 606
7 122
8 903
9 407
dtype: int64
'''
用 head 查詢前五筆資料.head( )
括號內可以指定要查詢的數量,像是.head(8)
,可以查詢前8筆
用 tail 查詢後五筆資料.tail( )
用 take 指定查詢索引值,
假如要指定查詢索引值為 2, 5 的資料,.take([2, 5])
#產生從0到1000之間的隨意整數10000個
import numpy as np
numbers = pd.Series(np.random.randint(0,1000,10000))
print("前五筆資料:", numbers.head())
print("前三筆資料:", numbers.head(3))
print("後五筆資料:", numbers.tail())
print("索引值為 2, 5 的資料:", numbers.take([2, 5]))
'''
前五筆資料: 0 571
1 224
2 408
3 984
4 617
dtype: int64
前三筆資料: 0 571
1 224
2 408
dtype: int64
後五筆資料: 9995 47
9996 424
9997 63
9998 190
9999 258
dtype: int64
索引值為 2, 5 的資料: 2 408
5 815
dtype: int64
'''
檢查輸入的 values 是否在 series 裡面,使用.isin( )
m_c.isin(["Visiting Hours", "Ghost"])
'''
Ed Sheeran True
Justin Biber True
Cardie B False
Anne-Maire False
dtype: bool
'''
Series 的逐元運算
先隨意創建五個學生的分數
scores = pd.Series([85,43,65,79,30], index = ["a","b","c","d","e"])
scores
'''
a 85
b 43
c 65
d 79
e 30
dtype: int64
'''
當老師想看有誰及格的時候
scores>60
'''
a True
b False
c True
d True
e False
dtype: bool
'''
可以直接用運算元比較,看到b跟e是不及格的
若是想單獨看到有及格的人,可以直接使用[ ]
產生一個新的series,裡面的人的分數是有及格的
scores[scores>60]
'''
a 85
c 65
d 79
dtype: int64
'''
假設老師想讓所有人的分數都除以10再加上85
可以直接用series運算
scores = (scores/10) + 85
'''
a 93.5
b 89.3
c 91.5
d 92.9
e 88.0
dtype: float64
'''
明天會進入到類似SQL架構的Dataframe
就可以更進階的操作一筆龐大的數據
進行資料初步的清洗