Pandas 是 Python 中強大的資料分析工具,提供了豐富的數據處理功能。在之前的課程中,我們學習了 Pandas 的基本操作,如資料讀取、檢視、清理和基本篩選。今天,我們將深入探討一些進階的數據處理操作,例如資料透視表、進階篩選、資料合併等,幫助我們更靈活地處理和分析資料。
先在同一個資料夾建立一個叫做panda.ipynb的檔案,第一段用這個程式碼
from google.colab import drive
drive.mount('/content/drive/')
import pandas as pd
iris_df=pd.read_csv('/content/drive/MyDrive/iris/iris_dataset.csv')
print(iris_df.head())
資料透視表是一種強大的資料彙總工具,能夠根據不同的維度(欄位)來彙總資料,類似於 Excel 中的樞紐分析表。
我們可以使用 pivot_table()
函數來建立一個簡單的資料透視表。
import pandas as pd
# Create a simple pivot table using 'target' instead of 'target_0' and 'target_1'
pivot_table = iris_df.pivot_table(values='sepal length (cm)', index='target', aggfunc='mean')
# Display the simple pivot table
print("Simple pivot table:")
print(pivot_table)
這段程式碼根據 target_0
和 target_1
建立了一個資料透視表,並計算每個分組的花萼長度的平均值。
我們可以在透視表中添加多個彙總函數(例如:平均值、總和、計數等),來更全面地觀察資料的分佈情況。
import pandas as pd
# Create a pivot table with multiple aggregation functions using 'target' as the index
pivot_table_multi = iris_df.pivot_table(values='sepal width (cm)', index='target', aggfunc=['mean', 'sum', 'count'])
# Display the pivot table with multiple aggregation functions
print("Pivot table with multiple aggregation functions:")
print(pivot_table_multi)
這段程式碼會為每個分組計算花萼寬度的平均值、總和和計數,幫助我們更深入地理解資料。
透視表可以幫助我們進行交叉分析,例如查看不同花卉種類的花萼長度和寬度之間的交叉分佈。
import pandas as pd
# Create a cross-tabulation (crosstab) using 'target' as both the row and column
cross_tab = pd.crosstab(index=iris_df['target'], columns=iris_df['target'])
# Display the crosstab
print("Crosstab for target:")
print(cross_tab)
這段程式碼會生成一個交叉表,展示不同花卉種類之間的交叉分佈情況。
除了基本的篩選條件外,我們可以使用 Pandas 進行更複雜的條件篩選與查詢操作。
我們可以使用多個條件進行篩選,例如篩選花萼長度大於 5 且花萼寬度小於 3 的資料。
# 多重條件篩選
# Filter the DataFrame where sepal length is greater than 5 and sepal width is less than 3
filtered_df = iris_df[(iris_df['sepal length (cm)'] > 5) & (iris_df['sepal width (cm)'] < 3)]
# Display the filtered data
print("Filtered data where sepal length > 5 and sepal width < 3:")
print(filtered_df.head())
這段程式碼會篩選出符合這些條件的資料,便於我們進行進一步的分析。
query()
進行條件查詢query()
函數能夠使用類似 SQL 的語法來查詢資料,使得查詢操作更加直觀。
# Use query() to filter the DataFrame based on conditions
query_result = iris_df.query('`sepal length (cm)` > 5 and `sepal width (cm)` < 3')
# Display the result of the query
print("Query result for sepal length > 5 and sepal width < 3:")
print(query_result.head())
這段程式碼使用 query()
函數進行條件查詢,結果與多重條件篩選相同,但語法更加直觀。
Pandas 提供了 merge()
、concat()
、join()
等函數來合併和連接多個資料集。
merge()
進行資料合併我們可以根據共同的鍵(key)來合併兩個資料框。
import pandas as pd
# Create two simple DataFrames
df1 = pd.DataFrame({
'id': [1, 2, 3],
'feature_1': ['A', 'B', 'C']
})
df2 = pd.DataFrame({
'id': [1, 2, 4],
'feature_2': ['X', 'Y', 'Z']
})
# Merge the two DataFrames using merge() on the 'id' column
merged_df = pd.merge(df1, df2, on='id', how='inner')
# Display the merged DataFrame
print("Merged DataFrame:")
print(merged_df)
這段程式碼會根據 id
鍵將兩個資料框進行內合併,結果只保留了 id
相同的資料。
concat()
進行資料連接concat()
函數可以將多個資料框沿著某個軸(行或列)進行連接。
import pandas as pd
# Create two simple DataFrames
df1 = pd.DataFrame({
'id': [1, 2, 3],
'feature_1': ['A', 'B', 'C']
})
df2 = pd.DataFrame({
'id': [1, 2, 4],
'feature_2': ['X', 'Y', 'Z']
})
# Concatenate the two DataFrames along rows (axis=0)
concat_df = pd.concat([df1, df2], axis=0, ignore_index=True)
# Display the concatenated DataFrame
print("Concatenated DataFrame (by rows):")
print(concat_df)
這段程式碼會將 df1
和 df2
按行進行連接,並重新編排索引。
join()
進行資料連接join()
函數可以根據索引進行資料連接,非常適合在處理多個索引相同的資料框時使用。
# 設置索引並使用 join() 進行連接
df1.set_index('id', inplace=True)
df2.set_index('id', inplace=True)
joined_df = df1.join(df2, how='inner')
print("使用 join() 連接的結果:")
print(joined_df)
這段程式碼會根據索引(id
)將兩個資料框進行內連接,只保留共同的索引。
資料分組與聚合操作可以幫助我們更好地了解資料的結構和特徵。
groupby()
進行資料分組groupby()
可以根據某個欄位對資料進行分組,然後應用聚合函數(如平均值、總和等)。
# 根據花卉種類進行分組,並計算每組的平均花萼長度
grouped_mean = iris_df.groupby('target_0')['sepal length (cm)'].mean()
print("每種花卉的平均花萼長度:")
print(grouped_mean)
這段程式碼會根據花卉種類進行分組,並計算每組的平均花萼長度。
agg()
進行多重聚合agg()
函數可以同時應用多個聚合函數到不同的欄位上。
# 對每個花卉種類進行多重聚合分析
grouped_agg = iris_df.groupby('target_0').agg({
'sepal length (cm)': ['mean', 'max'],
'sepal width (cm)': ['min', 'std']
})
print("每種花卉的多重聚合分析結果:")
print(grouped_agg)
這段程式碼會對每個花卉種類同時應用多個聚合函數,計算花萼長度的平均值和最大值,以及花萼寬度的最小值和標準差。
今天我們學習了如何使用 Pandas 進行進階數據操作,包括: