目录
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='学号