目錄
4.5 pandas 高級數據處理與分析
一、課程目標
二、對數據表格進行處理
(一)行列轉置
(二)將數據表轉換為樹形結構
三、數據表的拼接
(一)merge () 函數的運用
(二)concat () 函數的運用
(三)append () 函數的運用
四、對數據表格的同級運算
五、計算數據表格中數值的分布情況
六、對數據表中的相關性進行計算
七、對數據進行分類匯總
八、創建數據透視表
九、課程回顧和小結
十、課后練習
4.5 pandas 高級數據處理與分析
一、課程目標
本次課程主要圍繞 pandas 的高級數據處理與分析功能展開,通過理論講解和案例分析,讓學員掌握數據轉置、表格拼接、統計運算、相關性分析、分類匯總、數據透視表等高級操作技巧。學員學完本次課程后,能夠熟練使用 pandas 進行復雜的數據處理和深度數據分析。
二、對數據表格進行處理
在數據分析過程中,我們經常需要對數據表格進行各種處理,包括行列轉置和轉換為樹形結構。
(一)行列轉置
行列轉置是將數據表格的行和列互換位置。
import pandas as pd
import numpy as np# 創建示例數據
np.random.seed(42)
data = {'姓名': ['張三', '李四', '王五', '趙六'],'語文': [85, 90, 78, 88],'數學': [92, 87, 95, 80],'英語': [88, 91, 85, 92]
}
df = pd.DataFrame(data)
df = df.set_index('姓名')print("原始數據:")
print(df)# 行列轉置
df_transposed = df.T
print("\n轉置后的數據:")
print(df_transposed)# 恢復索引
df_transposed = df_transposed.reset_index()
df_transposed = df_transposed.rename(columns={'index': '科目'})
print("\n恢復索引后的數據:")
print(df_transposed)
這個案例展示了如何使用T屬性對數據表格進行行列轉置,以及如何恢復索引并修改列名。
(二)將數據表轉換為樹形結構
將數據表轉換為樹形結構可以更直觀地展示數據之間的層次關系。
# 創建樹形結構數據
tree_data = {'id': [1, 2, 3, 4, 5, 6, 7],'parent_id': [None, 1, 1, 2, 2, 3, 3],'name': ['A', 'B', 'C', 'D', 'E', 'F', 'G'],'value': [10, 20, 30, 40, 50, 60, 70]
}
df_tree = pd.DataFrame(tree_data)print("原始樹形結構數據:")
print(df_tree)# 定義構建樹形結構的函數
def build_tree(df, parent_id=None):tree = []children = df[df['parent_id'] == parent_id]for _, child in children.iterrows():node = {'id': child['id'],'name': child['name'],'value': child['value'],'children': build_tree(df, child['id'])}tree.append(node)return tree# 構建樹形結構
tree = build_tree(df_tree)
print("\n轉換后的樹形結構:")
import json
print(json.dumps(tree, indent=2, ensure_ascii=False))
這個案例展示了如何將數據表轉換為樹形結構。通過遞歸函數,可以將具有父子關系的數據轉換為嵌套的字典列表形式,便于進行樹形結構的展示和分析。
三、數據表的拼接
在數據分析過程中,我們經常需要將多個數據表拼接在一起。pandas 提供了多種拼接數據表的方法。
(一)merge () 函數的運用
merge()函數用于根據一個或多個鍵將不同 DataFrame 中的行連接起來。
# 創建示例數據
df1 = pd.DataFrame({'學號': [1001, 1002, 1003, 1004],'姓名': ['張三', '李四', '王五', '趙六'],'班級': ['一班', '二班', '一班', '二班']
})df2 = pd.DataFrame({'學號': [1001, 1002, 1003, 1005],'成績': [85, 90, 78, 88]
})print("df1:")
print(df1)
print("\ndf2:")
print(df2)# 內連接
df_inner = pd.merge(df1, df2, on='學號', how='inner')
print("\n內連接結果:")
print(df_inner)# 左連接
df_left = pd.merge(df1, df2, on='學號', how='left')
print("\n左連接結果:")
print(df_left)# 右連接
df_right = pd.merge(df1, df2, on='學號