当前位置: 首页 > news >正文

数据科学和机器学习的“看家兵器”——pandas模块 之五

目录

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

相关文章:

  • 用户安全架构设计
  • 【unity游戏开发——编辑器扩展】使用Selection类获取到选择的对象,并对选中对象进行一些处理
  • 【微信小程序】webp资源上传失败
  • 『已解决』Python virtualenv_ error_ unrecognized arguments_--wheel-bundle
  • Codeforces Round 1023 (Div.2)
  • JAVA学习-练习试用Java实现“语音识别的基础 :如使用MFCC特征提取和简单的分类器”
  • 【AI论文】对抗性后期训练快速文本到音频生成
  • stm32使用freertos时延时时间间隔不对,可能是晶振频率没设置
  • 【Redis】压缩列表
  • Oracle统计信息收集时的锁持有阶段
  • UDP 多点通信
  • 高频交直流电流测量技术:射频PA与MEMS测试的简单解决方案
  • Buildroot 移植MiniGUI
  • Python高级进阶:Vim与Vi使用指南
  • 多模态大语言模型arxiv论文略读(七十七)
  • 一站式本地化方案,解决欧洲反向海淘多重难题
  • 【Linux】网络基础与socket编程基础
  • 【中级软件设计师】网络攻击(附软考真题)
  • [Harmony]大文件持久化
  • Spring Boot多数据源配置的陷阱与终极解决方案
  • 降水较常年同期少五成,安徽四大水利工程调水超11亿方应对旱情
  • 俄媒:俄乌伊斯坦布尔谈判将于北京时间今天17时30分开始
  • 深圳拟出让3宗居住用地,共计用地面积6.77公顷
  • 市场监管总局等五部门约谈外卖平台企业
  • 一手实测深夜发布的世界首个设计Agent - Lovart。
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉