在Day10 要選陣圖還是陣符群?-框架和函式庫的異同中,我們有粗淺的介紹了一下Pandas這個函式庫。
這個函式庫在我們之後的機器學習操作上會常常用到,所以另外開了一篇文章來詳細的介紹一下它。
重點有以下幾個:
一維標籤陣列,可以包含任何資料型態(整數,字串,浮點數等)。每個元素都有一個與之相關聯的標籤,稱為索引。
對導入函式庫還不懂的人,可以先看看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
是一個二維標籤陣列,可以看作是一種類似於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
特點 | Series | DataFrame |
---|---|---|
維度 | 一維 | 二維 |
資料結構 | 由索引和值組成 | 由索引、列名和值組成 |
創建方式 | 從列表、字典等創建 | 從列表、字典、NumPy陣列等創建 |
長度 | 長度固定(由元素個數決定) | 長度可變(可以動態添加或刪除行列) |
範例代碼 | pd.Series([1, 2, 3]) |
pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) |
如果已經有資料當然就不用跟上面依樣自己打列表或表格啦!這邊來看看怎麼將資料匯進來吧!
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')
# 創建兩個示範用的 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])
結果:
# 創建兩個示範用的 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')
結果:
合併結果
好啦~今天就介紹到這邊,如果有那裡沒講清楚、不明白、想要聽的,請通通說出來,我會做修改和增加的!