iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
自我挑戰組

終極大數據地獄系列 第 9

#9 Pandas教學

Pandas序列-Series

安裝

請在終端機底下輸入這個,謝謝
pip install pandas

載入Pandas

老樣子,像這樣

import pandas as pd

如同numpy的簡稱,pd是世俗公認的pandas簡稱

Series建立

Series是Pandas最基礎的類別,簡單來說Series就是一條資料,他說一維的資料型態,長的像這樣

索引 1 2 3 4 5 6 7
資料 33 23 66 11 35 42 88

我們使用列表來建立Series

# 載入pandas
import pandas as pd

if __name__ == "__main__":
    # 以列表來建立Series
    l = [33, 23, 66, 11, 35, 42, 88]
    s = pd.Series(l)
    print(s)
    """
    印出
    0    33
    1    23
    2    66
    3    11
    4    35
    5    42
    6    88
    dtype: int64
    """

    # 存取
    print(s[4])
    # 印出 35

Series重要屬性

# 載入pandas
import pandas as pd

if __name__ == "__main__":
    # 以列表來建立Series
    l = [33, 23, 66, 11, 35, 42, 88]
    s = pd.Series(l)

    # 查看大小
    print(s.size)
    # 印出 7
    # 查看資料型態
    print(s.dtype)
    # 印出 int64
    # 查看資料形狀
    print(s.shape)
    # 印出 (7,)
    # 查看索引
    print(s.index)
    # 印出 RangeIndex(start=0, stop=7, step=1),傳回的物件RangeIndex可以視為下方的列表
    # [0, 1, 2, 3, 4, 5, 6],從0開始,到7停止,每個元素相差為1的列表,所以這的Series的索引就是0~6

Series重要方法

# 載入pandas
import pandas as pd

if __name__ == "__main__":
    # 以列表來建立Series
    l = [33, 23, 66, 11, 35, 42, 88]
    s = pd.Series(l)

    # 加總
    print(s.sum()) # 298
    # 最大值
    print(s.max()) # 88
    # 最小值
    print(s.min()) # 11
    # 連乘運算
    print(s.prod()) # 71281758240
    # 平均
    print(s.mean()) # 42.57142857142857
    # 中位數
    print(s.median()) # 35
    # 標準差
    print(s.std()) # 26.273288988737484
    # 找前n筆資料
    print(s.head(3))
    """
    0    33
    1    23
    2    66
    dtype: int64
    """
    # 找最大的n筆資料
    print(s.nlargest(3))
    """
    6    88
    2    66
    5    42
    dtype: int64
    """
    # 找最小的n筆資料
    print(s.nsmallest(3))
    """
    3    11
    1    23
    0    33
    dtype: int64
    """

自訂索引

# 載入pandas
import pandas as pd

if __name__ == "__main__":
    # 以列表來建立Series,索引為i
    l = [33, 23, 66, 11, 35, 42, 88]
    i = ["貓", "狗", "羊", "豬", "雞", "牛", "馬"]
    s = pd.Series(l, index = i)
    print(s)
    """
    貓    33
    狗    23
    羊    66
    豬    11
    雞    35
    牛    42
    馬    88
    dtype: int64
    """  
    print(s.index)
    # Index(['貓', '狗', '羊', '豬', '雞', '牛', '馬'], dtype='object')
    print(s["羊"])
    # 66

Pandas資料表-DataFrame

相較於Series是一條資料,DataFrame可以說是一張表格,我們日常生活中所見的資料大多是以表格的方式呈現,因此DataFrame是整個Pandas的主力類別,也是讓Pandas被稱為python版Excel的原因,DataFrame大概像這個樣子

索引 品牌"型號 自動排檔 價格
0 Toyota 86 False 1300000
1 Subaru BRZ True 1320000
2 NISSAN GT-R True 6750000
4 MAZDA MX-5 False 1340000

DataFrame建立

DataFrame是以字典來建立的

# 載入pandas
import pandas as pd

if __name__ == "__main__":
    # 以字典來建立DataFrame
    d = {
        "brand":["Toyota 86", "Subaru BRZ", "NISSAN GT-R", "MAZDA MX-5"],
        "auto":[False, True, True, False],
        "price":[1300000, 1320000, 6750000, 1340000],
        }
    data = pd.DataFrame(d)
    print(data)
    """
             brand   auto    price
    0    Toyota 86  False  1300000
    1   Subaru BRZ   True  1320000
    2  NISSAN GT-R   True  6750000
    3   MAZDA MX-5  False  1340000
    """

DataFrame基本操作

DataFrame的存取方式如下
這裡要提的是DataFrame是一張資料表,因此既然是資料表,就會有欄跟列的區別,欄就是直的,列是橫的,這點很重要,當然DataFrame不僅能操作一格資料,也能直接對一整欄或一整列做操作,一整欄或一整列就是指一條資料
因此從DataFrame取下一整欄或一整列的資料型態(類別)就是Series,所以Series的屬性和方法等等操作方式,也同樣適用於從DataFrame取下的一整欄或一整列的資料

# 載入pandas
import pandas as pd

if __name__ == "__main__":
    # 以字典來建立DataFrame
    d = {
        "brand":["Toyota 86", "Subaru BRZ", "NISSAN GT-R", "MAZDA MX-5"],
        "auto":[False, True, True, False],
        "price":[1300000, 1320000, 6750000, 1340000],
        }
    data = pd.DataFrame(d)
    print(data)
    """
             brand   auto    price
    0    Toyota 86  False  1300000
    1   Subaru BRZ   True  1320000
    2  NISSAN GT-R   True  6750000
    3   MAZDA MX-5  False  1340000
    """
    #操作一格資料
    # brand欄位的第0筆資料
    print(data["brand"][0]) # Toyota 86
    # price欄位的第2筆資料
    print(data["price"][2]) # 6750000

    #操作一欄資料
    #type()可以查看某個物件的類別
    print(type(data["auto"])) # <class 'pandas.core.series.Series'>
    print(data["auto"])
    """
    0    False
    1     True
    2     True
    3    False
    Name: auto, dtype: bool
    """
    print(data["auto"].dtype) # bool

    #操作一列(一整筆)資料,透過DataFrame的loc屬性
    #type()可以查看某個物件的類別
    print(type(data.loc[3])) # <class 'pandas.core.series.Series'>
    print(data.loc[3])
    """
    brand    MAZDA MX-5
    auto          False
    price       1340000
    Name: 3, dtype: object
    """
    print(data.loc[3].size) # 3

    #切片
    #從第1列開始取,一共要取2列
    print(data.loc[1:2])
    """
             brand   auto    price
    1   Subaru BRZ   True  1320000
    2  NISSAN GT-R   True  6750000
    """

    print(data.loc[1:2]["brand"])
    """
    1   Subaru BRZ
    2  NISSAN GT-R
    """

常用屬性

# 載入pandas
import pandas as pd

if __name__ == "__main__":
    # 以字典來建立DataFrame
    d = {
        "brand":["Toyota 86", "Subaru BRZ", "NISSAN GT-R", "MAZDA MX-5"],
        "auto":[False, True, True, False],
        "price":[1300000, 1320000, 6750000, 1340000],
        }
    data = pd.DataFrame(d)
    print(data)
    """
             brand   auto    price
    0    Toyota 86  False  1300000
    1   Subaru BRZ   True  1320000
    2  NISSAN GT-R   True  6750000
    3   MAZDA MX-5  False  1340000
    """

    # 大小
    print(data.size) # 12,一共12格資料
    # 形狀
    print(data.shape) #(4, 3),4列3欄
    # 索引
    print(data.index) #RangeIndex(start=0, stop=4, step=1)
    # 欄位
    print(data.columns) #Index(['brand', 'auto', 'price'], dtype='object')

上一篇
#8 NumPy教學
下一篇
#10 Pandas教學2
系列文
終極大數據地獄24

尚未有邦友留言

立即登入留言