iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
Python

30天Python資料分析挑戰:從基礎到視覺化系列 第 27

Day 27: 使用 Pandas 進行進階數據操作

  • 分享至 

  • xImage
  •  

Day 27: 使用 Pandas 進行進階數據操作

Pandas 是 Python 中強大的資料分析工具,提供了豐富的數據處理功能。在之前的課程中,我們學習了 Pandas 的基本操作,如資料讀取、檢視、清理和基本篩選。今天,我們將深入探討一些進階的數據處理操作,例如資料透視表、進階篩選、資料合併等,幫助我們更靈活地處理和分析資料。
https://ithelp.ithome.com.tw/upload/images/20241011/20140380J3JSrFuF0a.jpg

先在同一個資料夾建立一個叫做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())

1. 資料透視表(Pivot Table)

資料透視表是一種強大的資料彙總工具,能夠根據不同的維度(欄位)來彙總資料,類似於 Excel 中的樞紐分析表。

1.1 建立簡單的透視表

我們可以使用 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_0target_1 建立了一個資料透視表,並計算每個分組的花萼長度的平均值。

1.2 添加多個彙總函數

我們可以在透視表中添加多個彙總函數(例如:平均值、總和、計數等),來更全面地觀察資料的分佈情況。

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)

這段程式碼會為每個分組計算花萼寬度的平均值、總和和計數,幫助我們更深入地理解資料。

1.3 使用透視表進行交叉分析

透視表可以幫助我們進行交叉分析,例如查看不同花卉種類的花萼長度和寬度之間的交叉分佈。

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)

這段程式碼會生成一個交叉表,展示不同花卉種類之間的交叉分佈情況。

2. 進階篩選與條件查詢

除了基本的篩選條件外,我們可以使用 Pandas 進行更複雜的條件篩選與查詢操作。

2.1 使用多重條件進行篩選

我們可以使用多個條件進行篩選,例如篩選花萼長度大於 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())

這段程式碼會篩選出符合這些條件的資料,便於我們進行進一步的分析。

2.2 使用 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() 函數進行條件查詢,結果與多重條件篩選相同,但語法更加直觀。

3. 資料合併與連接

Pandas 提供了 merge()concat()join() 等函數來合併和連接多個資料集。

3.1 使用 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 相同的資料。

3.2 使用 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)

這段程式碼會將 df1df2 按行進行連接,並重新編排索引。

3.3 使用 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)將兩個資料框進行內連接,只保留共同的索引。

4. 資料分組與聚合

資料分組與聚合操作可以幫助我們更好地了解資料的結構和特徵。

4.1 使用 groupby() 進行資料分組

groupby() 可以根據某個欄位對資料進行分組,然後應用聚合函數(如平均值、總和等)。

# 根據花卉種類進行分組,並計算每組的平均花萼長度
grouped_mean = iris_df.groupby('target_0')['sepal length (cm)'].mean()
print("每種花卉的平均花萼長度:")
print(grouped_mean)

這段程式碼會根據花卉種類進行分組,並計算每組的平均花萼長度。

4.2 使用 agg() 進行多重聚合

agg() 函數可以同時應用多個聚合函數到不同的欄位上。

# 對每個花卉種類進行多重聚合分析
grouped_agg = iris_df.groupby('target_0').agg({
    'sepal length (cm)': ['mean', 'max'],
    'sepal width (cm)': ['min', 'std']
})
print("每種花卉的多重聚合分析結果:")
print(grouped_agg)

這段程式碼會對每個花卉種類同時應用多個聚合函數,計算花萼長度的平均值和最大值,以及花萼寬度的最小值和標準差。

5. 小結

今天我們學習了如何使用 Pandas 進行進階數據操作,包括:

  1. 建立資料透視表(pivot table),用於彙總和交叉分析。
  2. 進階篩選與條件查詢,

上一篇
Day 26: 資料標準化與正規化
下一篇
Day 28: 使用 Sklearn 進行簡單的線性回歸
系列文
30天Python資料分析挑戰:從基礎到視覺化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言