Python Pandas入門:提升資料分析效率

什麼是 Pandas?在資料分析中的角色

為什麼要學習 Pandas

Pandas 是在使用 Python 進行資料分析時不可或缺的函式庫。它提供了許多功能,可以有效地進行資料的前處理、轉換與分析。
在實際的資料分析工作中,我們經常需要處理大量資料,並從中提取出有用的資訊。
Pandas 能夠簡化這些資料操作流程,因此成為資料科學家與分析師必備的工具。
此外,Pandas 也可以輕鬆與 Python 的豐富生態系統整合,大幅提升資料分析的效率。

使用 Pandas 的優點

透過 Pandas,可以減少操作資料時的程式碼量,並撰寫出更具可讀性的代碼。同時,它也能夠快速處理大量資料。
Pandas 是建立在數值運算函式庫 NumPy 之上,內部實作上具有高效率的處理能力。
因此,即使是面對龐大的資料集,也能進行快速且簡潔的資料操作。
這讓開發效率提升,並能讓你更專注在分析本身。

Pandas 的安裝與環境設定

想要開始使用 Pandas,首先需要安裝它。可以使用 pip 命令簡單地完成安裝。我們也會介紹如何設定 Jupyter Notebook 等環境。
使用下列指令即可安裝 Pandas:

pip install pandas

進行資料分析時,Jupyter Notebook 是非常方便的工具。安裝後,你可以直接在網頁瀏覽器上編寫、執行程式碼,並立刻查看結果。
使用以下指令可以安裝 Jupyter Notebook:

pip install notebook

完成這些設定之後,就可以馬上開始使用 Pandas 進行資料分析了。

Pandas 基礎:Series 與 DataFrame

Series 的建立與操作

Pandas 的基礎資料結構之一是 Series,也就是一維的資料結構。可以從 list 或 NumPy 陣列輕鬆建立。我們將說明如何存取與操作元素。
Series 就像是帶有標籤的陣列,每個元素都有對應的索引。
從 list 建立 Series 可以使用 pandas.Series() 函數,如下所示:

import pandas as pd
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
print(s)

你也可以指定自訂的索引值:

import pandas as pd
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index=index)
print(s)

若要存取 Series 中的元素,可以指定索引:
print(s[‘a’])

此外,也可以像 NumPy 陣列一樣進行切片操作:
print(s[‘b’:’d’])

DataFrame 的建立與操作

DataFrame 是二維的資料結構,適合用來處理表格形式的資料。我們將說明如何從 CSV 檔讀取資料,或是從字典建立 DataFrame。
DataFrame 由列與欄組成,每個欄位可以包含不同的資料型態。
要從字典建立 DataFrame,可以使用 pandas.DataFrame() 函數,如下所示:

import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 28],
'city': ['Tokyo', 'Osaka', 'Kyoto']}
df = pd.DataFrame(data)
print(df)

若要從 CSV 檔讀取資料,可以使用 pandas.read_csv():

import pandas as pd
df = pd.read_csv('data.csv')
print(df)

要存取 DataFrame 的欄位,請指定欄位名稱:
print(df[‘name’])

也可以一次選取多個欄位:
print(df[[‘name’,’age’]])

若要存取資料列,可以使用 loc 或 iloc,稍後會進一步說明它們的用法。

確認與轉換資料型態

Pandas 可以處理多種資料型態。我們將說明如何確認欄位的資料型態,以及在需要時如何轉換資料型態。
要確認 DataFrame 各欄的資料型態,可以使用 dtypes 屬性:

import pandas as pd
data = {'col1': [1, 2, 3], 'col2': [1.1, 2.2, 3.3], 'col3': ['a','b', 'c']}
df = pd.DataFrame(data)
print(df.dtypes)

若要轉換資料型態,可以使用 astype() 方法:

df['col1'] = df['col1'].astype('float')
print(df.dtypes)

常見的資料型態包括:int(整數)、float(浮點數)、str(字串)、datetime(日期時間)等等。根據需求轉換適當的型態,有助於節省記憶體並提升運算效率。

資料的參照與擷取

使用 loc 與 iloc 進行資料擷取

loc 與 iloc 是從 DataFrame 擷取特定資料列或欄的強大工具。以下將搭配範例說明其使用方法。
loc 是以標籤(Label)來指定列或欄:

import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 28],
'city': ['Tokyo', 'Osaka', 'Kyoto']}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3'])
print(df.loc['row1', 'name'])
print(df.loc['row1':'row2', ['name','age']])

iloc 則是以整數位置來指定列或欄:

print(df.iloc[0, 0])
print(df.iloc[0:2, 0:2])

loc 和 iloc 都非常實用,是在資料探索與分析中不可或缺的工具。

依條件擷取資料列

說明如何根據特定條件篩選資料列。會介紹使用 query() 方法與比較運算子來進行條件篩選。
使用比較運算子篩選符合條件的資料列:

import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 28],
'city': ['Tokyo', 'Osaka', 'Kyoto']}
df = pd.DataFrame(data)
print(df[df['age'] > 28])

使用 query() 方法可撰寫更複雜的條件:

print(df.query('age > 28'))
print(df.query("city == 'Tokyo'"))

也可以組合多個條件:

print(df[(df['age'] > 25) & (df['city'] != 'Osaka')])
print(df.query("age > 25 and city != 'Osaka'"))

靈活運用這些方法,即可有效從 DataFrame 中擷取所需資料。

使用 head() 和 tail() 確認資料

head() 和 tail() 方法可以快速查看 DataFrame 的前幾列或後幾列,便於掌握資料概況。
使用 dataframe.head() 可顯示前幾列,若未指定參數,預設為前 5 列:

import pandas as pd
data = {'col1': range(10), 'col2': range(10, 20)}
df = pd.DataFrame(data)
print(df.head())
print(df.head(3))

使用 dataframe.tail() 可顯示後幾列,預設為最後 5 列:

print(df.tail())
print(df.tail(3))

這些方法在處理大型資料時特別有用,能快速掌握資料的整體輪廓。

資料的加工與整理

新增、刪除與修改欄位

這一節將說明如何在 DataFrame 中新增欄位、刪除不需要的欄位,以及修改現有欄位的資料。
要新增新的欄位,只需指定欄位名稱並賦值即可:

import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 28]}
df = pd.DataFrame(data)
df['gender'] = ['female', 'male', 'male']
print(df)

若要修改現有欄位的值,可直接重新賦值:

df['age'] = df['age'] + 1
print(df)

要刪除欄位,可使用 drop() 方法,並指定要刪除的欄位名稱。加上 inplace=True 表示直接修改原始 DataFrame:

df.drop('gender', axis=1, inplace=True)
print(df)

結合這些操作,就能靈活處理與整理資料。

資料排序(Sort)

說明如何根據特定欄位的值對 DataFrame 的資料列進行排序。可指定升冪(ascending)或降冪排序,亦可使用多個欄位排序。
使用 sort_values() 方法指定要排序的欄位:

import pandas as pd
data = {'name': ['Bob', 'Alice', 'Charlie'],
'age': [30, 25, 28]}
df = pd.DataFrame(data)
df_sorted = df.sort_values('age')
print(df_sorted)

預設為升冪排序。若要降冪排序,設定 ascending=False:

df_sorted = df.sort_values('age', ascending=False)
print(df_sorted)

若要以多個欄位排序,可傳入欄位名稱的列表:

df_sorted = df.sort_values(['age', 'name'])
print(df_sorted)

運用這些功能可將資料整理成更容易分析的格式。

資料的統計量

說明如何計算平均值、中位數、標準差等統計指標。使用 describe() 方法還可以一次取得整體概況。
要計算各欄的平均值,可使用 mean() 方法:

import pandas as pd
data = {'col1': [1, 2, 3, 4, 5], 'col2': [2, 4, 6, 8, 10]}
df = pd.DataFrame(data)
print(df.mean())

中位數可使用 median() 方法:

print(df.median())

標準差則使用 std() 方法:

print(df.std())

若要查看綜合統計量,可使用 describe() 方法:

print(df.describe())

這些統計量有助於理解資料的分佈與特性。

年収訴求

資料的輸出與實務應用

匯出為 CSV 檔

介紹如何將整理後的 DataFrame 匯出為 CSV 檔案,並說明如何設定編碼與分隔符號等參數。
使用 to_csv() 方法可以匯出為 CSV 檔,指定檔名即可:

import pandas as pd
data = {'name': ['Alice', 'Bob'], 'age': [25, 30]}
df = pd.DataFrame(data)
df.to_csv('output.csv', index=False)

指定 index=False 可避免將索引一起輸出。
若要指定分隔符號,可使用 sep 參數:

df.to_csv('output.csv', sep='\t', index=False)

若要指定編碼格式,可使用 encoding 參數:

df.to_csv('output.csv', encoding='utf-8', index=False)

透過這些設定,可以靈活輸出符合需求的 CSV 檔案。

缺失值的處理

說明如何處理缺失值(NaN),包括檢查、補值與刪除等策略。
使用 isnull() 方法可以檢查是否有缺失值,結果會以布林值表示:

import pandas as pd
import numpy as np
data = {'col1': [1, 2, np.nan], 'col2': [4, np.nan, 6]}
df = pd.DataFrame(data)
print(df.isnull())

使用 sum() 可計算每欄缺失值的數量:

print(df.isnull().sum())

若要以指定值填補缺失值,可使用 fillna() 方法:

df_filled = df.fillna(0)
print(df_filled)

若要刪除含有缺失值的列,可使用 dropna() 方法:

df_dropped = df.dropna()
print(df_dropped)

妥善處理缺失值有助於提高資料分析的準確性與完整性。

Pandas 總結與後續學習建議

回顧本文介紹的 Pandas 基礎知識,並提供進一步學習的方向。讓我們活用 Pandas 邁向更進階的資料分析之路。
本文說明了 Pandas 的基本用法,包括 Series 與 DataFrame 的建立、資料擷取、篩選、加工、整理、統計量計算、資料輸出與缺失值處理等實用操作。
若想進一步進行更進階的資料分析,建議學習 Pandas 的進階功能:如 groupby() 進行分組彙總、merge() 進行資料合併、pivot_table() 建立樞紐分析表等。
此外,若搭配 Matplotlib 或 Seaborn 等資料視覺化函式庫,將能進行更有說服力的分析與報告呈現。
透過持續學習與實作,你將能有效提升資料分析能力,挑戰更高層次的應用。
Pandas 是非常強大的工具,熟練掌握之後,能大幅提升分析效率與成果品質。讓我們每天都多學一點,把 Pandas 真正用在實務中!

年収訴求