iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
AI & Data

跟我一起在AI的世界裡打怪獸系列 第 16

Day16 函式庫Pandas-Series、DataFrame、導入資料、缺失值、合併

  • 分享至 

  • xImage
  •  

Day10 要選陣圖還是陣符群?-框架和函式庫的異同中,我們有粗淺的介紹了一下Pandas這個函式庫。

這個函式庫在我們之後的機器學習操作上會常常用到,所以另外開了一篇文章來詳細的介紹一下它。

重點有以下幾個:

  1. Series、DataFrame各自的涵義與異同。
  2. 導入資料(Excel、CSV)
  3. 處理資料缺失值(檢查、刪除、填入)
  4. 合併

Series、DataFrame各自的涵義與異同

Series

一維標籤陣列,可以包含任何資料型態(整數,字串,浮點數等)。每個元素都有一個與之相關聯的標籤,稱為索引。

對導入函式庫還不懂的人,可以先看看Day13 python語法(中)-導入函式庫這篇的介紹。

Panda"s",記得在導入的時候要加s哦,不然跑出來的結果會跟你說他找不到這個函式庫= =

創建方法:

# 因為Sereis是panda函式庫中的方法,所以要先導入函式庫。
import pandas as pd

# 用列表創建 Series,由於沒有設定索引值,所以系統會自動設定索引值。(0,1,2,3,……)
data = [1, 2, 3, 4, 5]
s = pd.Series(data)

# 用字典創建 Series,和列表的差別是,字典的「鍵」會成為Series的索引。
data = {'a': 1, 'b': 2, 'c': 3}
s = pd.Series(data)

基本操作方法:

# 通過索引訪問元素
s[0]  # 訪問第一個元素
s['a']  # 訪問索引為 a 的元素

# 使用條件篩選
s[s > 2]  # 選擇大於2的元素

# 運算
s + 1  # 對所有元素加1

DataFrame

是一個二維標籤陣列,可以看作是一種類似於Excel表格或SQL表的數據結構。每列可以包含不同的資料型態。

要注意Data「F」rame,其中的F是大寫,在寫程式的時候要注意,大小寫錯的話就跑不出來囉!

創建方法:

# 因為DataFrame是panda函式庫中的方法,所以要先導入函式庫
import pandas as pd

# 用列表和字典創建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'City': ['New York', 'San Francisco', 'Los Angeles']}

df = pd.DataFrame(data)

基本操作方法:

# 查看列
df['Name']  # 獲取 'Name' 列方式一
df.Name  # 獲取 'Name' 列方式二

# 查看行
df.iloc[0]  # 獲取第一行
df.loc[0]   # 也可以使用標籤獲取行

# 選擇特定行和列的資料
df.loc[0, 'Name']  # 獲取第一行的 'Name' 列

# 條件篩選
df[df['Age'] > 30]  # 選擇年齡大於30的行

# 添加列
df['Country'] = ['USA', 'USA', 'USA']

# 刪除列
df = df.drop(columns=['Country'])

題外話:行列分辨

行跟列到底誰是橫的誰是直的,常常會有人搞不懂(我當初也是這樣),直到我看到這張圖片……的確這樣是蠻好記的XD

行列分辨

資料來源:https://disp.cc/b/Gossiping/coSf

Series、DataFrame差別表格

特點 Series DataFrame
維度 一維 二維
資料結構 由索引和值組成 由索引、列名和值組成
創建方式 從列表、字典等創建 從列表、字典、NumPy陣列等創建
長度 長度固定(由元素個數決定) 長度可變(可以動態添加或刪除行列)
範例代碼 pd.Series([1, 2, 3]) pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

導入資料(CSV、Excel)

如果已經有資料當然就不用跟上面依樣自己打列表或表格啦!這邊來看看怎麼將資料匯進來吧!

import pandas as pd

# 導入CSV檔案
df = pd.read_csv('檔案名稱.csv')

# 導入Excel檔案
df = pd.read_excel('檔案名稱.xlsx')

處理缺失值(檢查、刪除、填入)

在資料中,常常會有一些缺失值,可能是因為資料收集過程中的錯誤或者某些資料確實不存在。但這些缺失值會影響最後資料的準確性,因此處理缺失值是資料清理階段的一個重點。

檢查缺失值:

# 檢查每列是否有缺失值
df.isnull()

刪除缺失值:

# 刪除包含缺失值的行
df.dropna()

# 刪除包含缺失值的列
df.dropna(axis=1)

填入缺失值:

# 使用特定的值("value")填充缺失值,"value"可以自己設定。
df.fillna(value)

### 像要算總和或平均的資料表可以用以下這兩種,以免填0會讓資料誤差太大。
# 使用表格內前一個非缺失值填充缺失值
df.fillna(method='ffill')

# 使用表格內後一個非缺失值填充缺失值
df.fillna(method='bfill')

合併資料

拼接(Concatenating):

# 創建兩個示範用的 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7']})

# 沿著行方向拼接(垂直拼接)
result = pd.concat([df1, df2])

結果:
拼接結果

合併(Merging):

# 創建兩個示範用的 DataFrame
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})

# 根據 'key' 列進行合併
result = pd.merge(left, right, on='key')

結果:
合併結果

結語

好啦~今天就介紹到這邊,如果有那裡沒講清楚、不明白、想要聽的,請通通說出來,我會做修改和增加的!


上一篇
Day15 python語法(下)-語句(if、while、for)、定義函式(def)
下一篇
Day17 資料預處理-資料類型、缺失值、標準化、獨熱編碼、管道器
系列文
跟我一起在AI的世界裡打怪獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言