iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
AI & Data

從資料庫到資料分析視覺化系列 第 16

{DAY 16} Pandas 學習筆記 part.2

  • 分享至 

  • xImage
  •  

前言

Pandas 是強大的資料科學分析工具,結合前幾天所學的NumPy特性

提供方便讀取及使用的資料結構

來處理關聯式數據和有標籤的數據

上一章介紹了Series的概念
今天要進行延伸的學習
分成兩部分:

  1. 取得特定值
  2. 與NumPy的整合

看的課程是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
'''

與 NumPy 的整合

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

就可以更進階的操作一筆龐大的數據

進行資料初步的清洗


上一篇
{DAY 15} Pandas 學習筆記 part.1
下一篇
{DAY 17} Pandas 學習筆記part.3
系列文
從資料庫到資料分析視覺化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言