【Python从入门到进阶】61、Pandas中DataFrame对象的操作(二)
接上篇《60、Pandas中DataFrame对象的操作(一)》
上一篇我们讲解了DataFrame对象的简介、基本操作及数据清洗相关的内容。本篇我们来继续讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。
一、DataFrame的统计分析
在数据分析和处理中,Pandas的DataFrame提供了强大的统计分析功能,帮助我们深入理解数据的分布、趋势和特征。以下将详细介绍描述性统计、分组聚合以及数据透视表等关键功能。
1、描述性统计
描述性统计是数据分析的第一步,它通过计算一系列统计量来概括数据的中心趋势、离散程度和分布形态。在Pandas中,我们可以轻松地对DataFrame中的数值列进行描述性统计分析。
●计算均值(Mean):均值是所有观测值的算术平均值,能够反映数据的中心位置。使用.mean()方法计算DataFrame中所有数值列的均值,或者通过指定列名来计算特定列的均值。
●计算中位数(Median):中位数是将一组数据从小到大排列后,位于中间位置的数。当数据中存在极端值时,中位数比均值更能反映数据的中心趋势。使用.median()方法计算中位数。
●计算众数(Mode):众数是数据集中出现次数最多的数。Pandas的DataFrame没有直接的.mode()方法来计算众数,但可以使用scipy.stats.mode或pandas.Series.mode()(对于Series)来实现。对于DataFrame,通常需要先选择一列,然后应用此方法。
●计算标准差(Standard Deviation):标准差是衡量数据离散程度的一种指标,表示数据点与均值的平均距离。使用.std()方法计算标准差。
# 示例代码
import pandas as pd
import numpy as np# 创建一个包含不同类型数据的表
data = {'编号': [1, 2, 3, 4, 5, 6],'姓名': ['张三', '李四', '王五', '赵六', '孙七', '李雷'],'年龄': [25, 30, 28, 22, 35, 25],'薪资': [50000, 60000, 70000, 80000, 40000, 50000],'入职日期': ['2020-01-01', '2021-02-15', '2022-03-01', '2021-04-15', '2020-05-01', '2020-01-01'], # 日期时间字符串'类别': ['A', 'B', 'A', 'C', 'C', 'A'] # 分类数据
}# 将数据字典转换为DataFrame
df = pd.DataFrame(data)print("薪资列均值:", df['薪资'].mean())
print("年龄中位数:", df['年龄'].median())
# 对于众数,需要先选择一列
mode_val = df['类别'].mode()[0]
print("类别众数:", mode_val)
print("薪资标准差", df['薪资'].std())
测试结果:
2、分组聚合
分组聚合是数据分析中常用的技术,它允许我们将数据按照一个或多个键进行分组,然后对每个组应用聚合函数来计算统计量。
●使用groupby()方法进行分组:groupby()方法根据一个或多个列的值将数据分成多个组。分组后,可以使用聚合函数对每组数据进行操作。
●聚合函数:Pandas提供了多种聚合函数,如sum()(求和)、mean()(均值)、count()(计数)、max()(最大值)、min()(最小值)等。这些函数可以直接应用于groupby()的结果上。
# 分组求和
grouped_sum = df.groupby('类别').sum()
print("分组求和(薪资为例):")
print(grouped_sum[['薪资']])# 分组计算均值,仅对数值列操作
numeric_cols = ['年龄', '薪资'] # 指定要计算的数值列
grouped_mean = df.groupby('类别')[numeric_cols].mean()print("分组计算均值(薪资和年龄为例):")
print(grouped_mean)
测试结果:
3、数据透视表
数据透视表是一种强大的数据分析工具,它能够以表格的形式展示数据的分组汇总信息,便于进行数据的比较和分析。使用pivot_table()方法创建数据透视表:pivot_table()方法能够根据一个或多个键对数据进行分组,并对每个组应用聚合函数来计算统计量。与groupby()相比,pivot_table()提供了更灵活的布局选项,如指定行索引、列索引和值。
# 示例代码
# 创建一个示例DataFrame
data2 = {'产品': ['苹果', '香蕉', '苹果', '橙子', '香蕉', '苹果', '橙子', '香蕉'],'地区': ['北方', '南方', '北方', '北方', '南方', '南方', '南方', '北方'],'销售量': [50, 60, 70, 80, 90, 100, 110, 120],'销售额': [250, 300, 350, 400, 450, 500, 550, 600]
}df = pd.DataFrame(data2)# 打印原始DataFrame
print("原始DataFrame:")
print(df)# 创建数据透视表
# 索引为'产品',列为'地区',聚合函数为sum(对销售量和销售额进行求和)
pivot_table = pd.pivot_table(df, values=['销售量', '销售额'], index=['产品'], columns=['地区'], aggfunc='sum')# 打印数据透视表
print("\n数据透视表:")
print(pivot_table)
测试效果:
在上面的代码中,values参数指定了要汇总的列,index参数指定了行索引列,columns参数指定了列索引列,aggfunc参数指定了聚合函数。通过这种方式,我们可以轻松地创建出复杂的数据透视表,以满足不同的数据分析需求。
二、DataFrame的可视化
在数据分析和数据科学领域,数据可视化是理解数据分布、趋势和关系的关键步骤。Pandas库虽然主要聚焦于数据处理,但它与强大的可视化库(如Matplotlib和Seaborn)的无缝集成,使得从数据处理到数据可视化的流程变得极为顺畅。以下将详细介绍如何使用Pandas结合Matplotlib和Seaborn库进行DataFrame的可视化。
1、整合Matplotlib进行绘图
Matplotlib是Python中最基础且广泛使用的绘图库之一,它提供了大量的绘图功能,能够生成出版级别的图表。Pandas的DataFrame和Series对象可以直接与Matplotlib集成,方便地将数据转换为图形。
(1)绘制柱状图
柱状图是展示分类数据(如不同类别的销售量)的一种直观方式。
import pandas as pd
import matplotlib.pyplot as plt# 示例数据
data = {'产品': ['苹果', '香蕉', '橙子'], '销售量': [100, 150, 120]}
df = pd.DataFrame(data)# 设置Matplotlib支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题# 绘制柱状图
df.plot(kind='bar', x='产品', y='销售量')
plt.title('产品销售量')
plt.xlabel('产品')
plt.ylabel('销售量')
plt.show()
测试效果:
(2)绘制折线图
折线图常用于展示时间序列数据或连续变量的变化趋势。
# 假设我们有时间序列数据
data = {'日期': ['2023-01', '2023-02', '2023-03'], '销售额': [200, 250, 300]}
df = pd.DataFrame(data)
df['日期'] = pd.to_datetime(df['日期']) # 确保日期是datetime类型 # 绘制折线图
df.plot(kind='line', x='日期', y='销售额')
plt.title('销售额变化趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.xticks(rotation=45) # 旋转x轴标签以便阅读
plt.show()
测试效果:
(3)绘制饼图
饼图用于展示各部分在整体中的比例。
# 使用之前的销售数据
df.plot(kind='pie', y='销售量', labels=df['产品'], autopct='%1.1f%%')
plt.title('产品销售量比例')
plt.ylabel('') # 饼图通常不需要y轴标签
plt.show()
测试效果:
2、使用Seaborn库进行更高级的可视化
Seaborn是基于Matplotlib的高级绘图库,它提供了更多的绘图功能和更美观的默认样式,与Pandas的集成也非常方便。
Seaborn能够自动处理Pandas DataFrame的索引和列名,使得绘图过程更加简洁。同时,Seaborn提供了多种类型的图表,如散点图、箱型图、热力图等,以及用于统计分析和数据探索的功能。
(1)散点图
散点图用于展示两个变量之间的关系。
import seaborn as sns # 假设我们有两个变量
data = {'体重': [50, 60, 70, 80, 90], '身高': [160, 170, 180, 190, 200]}
df = pd.DataFrame(data) # 绘制散点图
sns.scatterplot(x='身高', y='体重', data=df)
plt.title('身高与体重的关系')
plt.show()
测试结果:
(2)箱型图
箱型图用于展示数据的分布,包括中位数、四分位数、异常值等。
# 使用之前的销售数据
sns.boxplot(x='产品', y='销售量', data=df)
plt.title('产品销售量的分布情况')
plt.show()
测试结果:
(3)热力图
热力图用于展示矩阵数据中的数值大小,常用于展示相关性矩阵或频率矩阵。
# 绘制热力图
# 创建数据集
data = {'助攻数': [4, 5, 5, 6, 7, 8, 8, 10],'篮板数': [12, 14, 13, 7, 8, 8, 9, 13],'得分': [22, 24, 26, 26, 29, 32, 20, 14]}
df = pd.DataFrame(data)# 计算相关矩阵
corr_matrix = df.corr()# 显示结果,保留三位小数
print(corr_matrix.round(3))# 绘制热力图
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()
测试结果:
通过以上示例,我们可以看到Pandas结合Matplotlib和Seaborn库能够轻松实现DataFrame的可视化,无论是基础的图表类型还是更高级的数据可视化需求,都能轻松展示。
三、DataFrame的导出与保存
1、导出为CSV文件
CSV(Comma-Separated Values)是一种常用的文本文件格式,用于存储表格数据,包括数字、文本等。Pandas提供了to_csv()方法,可以方便地将DataFrame导出为CSV文件。●基本用法:
import pandas as pd# 创建一个包含不同类型数据的表
data = {'编号': [1, 2, 3, 4, 5, 6],'姓名': ['张三', '李四', '王五', '赵六', '孙七', '李雷'],'年龄': [25, 30, 28, 22, 35, 25],'薪资': [50000, 60000, 70000, 80000, 40000, 50000],'入职日期': ['2020-01-01', '2021-02-15', '2022-03-01', '2021-04-15', '2020-05-01', '2020-01-01'], # 日期时间字符串'类别': ['A', 'B', 'A', 'C', 'C', 'A'] # 分类数据
}# 将数据字典转换为DataFrame
df = pd.DataFrame(data)df.to_csv('data.csv', index=False) # index=False表示不保存行索引
●高级选项:
sep:指定字段分隔符,默认为逗号,。
encoding:指定文件的编码格式,如utf-8。
columns:指定要导出的列,通过列名列表实现。
header:是否写入列名作为文件头部,默认为True。
效果:
2、导出为Excel文件
Excel文件因其良好的兼容性和用户友好的界面,在数据分析领域广受欢迎。Pandas通过to_excel()方法支持将DataFrame导出为Excel文件,但需要注意的是,这要求安装了openpyxl或xlwt库作为引擎。
●安装必要的库(如果尚未安装):
pip install openpyxl
●基本用法:
df.to_excel('data.xlsx', index=False, engine='openpyxl')
●高级选项:
sheet_name:指定工作表名,默认为'Sheet1'。
startrow和startcol:指定开始写入的行和列(从0开始计数)。
float_format:浮点数的格式化字符串,如'%.2f'表示保留两位小数。
测试效果:
3、导出为其他格式(可选)
Pandas不仅限于导出为CSV和Excel文件,还支持多种其他格式,如SQL数据库、JSON文件等,这为数据分析师提供了极大的灵活性。
●导出到SQL数据库:
使用to_sql()方法可以将DataFrame直接保存到SQL数据库中。这需要先安装数据库连接库(如sqlalchemy和相应的数据库驱动)。
from sqlalchemy import create_engine # 创建数据库连接引擎
engine = create_engine('sqlite:///mydatabase.db') # 将DataFrame保存到SQL表
df.to_sql('tablename', con=engine, if_exists='replace', index=False)
●导出为JSON文件:
JSON格式因其轻量级和易于阅读的特性,在Web开发中广泛应用。Pandas的to_json()方法可以将DataFrame转换为JSON格式的字符串或文件。
# 导出为JSON字符串
json_str = df.to_json(orient='records')# 或直接写入文件
df.to_json('data.json', orient='records', lines=True)
orient参数控制JSON对象的结构,常见的选项有'split', 'records', 'index', 'columns', 'values', 和 'table'。
测试效果:
至此,关于DataFrame对象的统计分析、可视化以及数据导出与保存相关内容已介绍完毕,下一篇我们来讲解DataFrame对象的案例实践。
转载请注明出处:https://guangzai.blog.csdn.net/article/details/140753857
相关文章:
【Python从入门到进阶】61、Pandas中DataFrame对象的操作(二)
接上篇《60、Pandas中DataFrame对象的操作(一)》 上一篇我们讲解了DataFrame对象的简介、基本操作及数据清洗相关的内容。本篇我们来继续讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。 一、DataFrame的统计分析 在数据分析和处理中…...
Linux(虚拟机)的介绍
Linux介绍 常见的操作系统 Windows:微软公司开发的一款桌面操作系统(闭源系统)。版本有dos,win98,win NT,win XP , win7, win vista. win8, win10,win11。服务器操作系统:winserve…...
CSS(九)——CSS 轮廓(outline)
CSS 轮廓(outline) 轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。 轮廓(outline)属性指定元素轮廓的样式、颜色和宽度。 让我们用一个图来看…...
Unity Timeline:构建复杂动画序列的利器
Unity的Timeline是一个强大的动画工具,它允许开发者创建复杂的动画序列,将动画、音频和事件整合到一个统一的时间轴上。Timeline的可视化编辑界面使得动画制作变得更加直观和灵活。本文将介绍Unity Timeline的基本概念、功能以及如何使用它来实现动画。 …...
C# 与C++ cli
cli CLI(Command Line Interface)是一种通过命令行界面与计算机系统进行交互的方式。它提供了一种以文本形式输入命令和接收系统输出的方法,用于执行各种操作和管理计算机系统。以下是CLI的详细解释: 一、定义与基本概念 定义&…...
Linux文件编程--打开及创建
...
Vue3点击按钮实现跳转页面并携带参数
前提:有完整的路由规则 1.源页面 <template><div><h1>源页面</h1><!--通过js代码跳转--><template #default"scope"><button click"toTargetView(scope.row)">点击跳转携带参数</button><…...
探索Linux-1-虚拟机远程登陆XShell6远程传输文件Xftp6
Linux是什么? Linux是一个开源的操作系统内核,由林纳斯托瓦兹(Linus Torvalds)于1991年首次发布。它基于Unix操作系统,但提供了更多的自由和灵活性。Linux内核是操作系统的核心部分,负责管理系统资源、处理…...
SpringBoot中使用监听器
1.定义一个事件 /*** 定义事件* author hrui* date 2024/7/25 12:46*/ public class CustomEvent extends ApplicationEvent {private String message;public CustomEvent(Object source, String message) {super(source);this.message message;}public String getMessage() …...
mybatise全接触-面试宝典-知识大全
1 . 简述什么是Mybatis和原理 ? Mybatis工作原理: (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者…...
Catalyst优化器:让你的Spark SQL查询提速10倍
目录 1 逻辑优化阶段 2.1 逻辑计划解析 2.2 逻辑计划优化 2.2.1 Catalys的优化过程 2.2.2 Cache Manager优化 2 物理优化阶段 2.1 优化 Spark Plan 2.1.1 Catalyst 的 Join 策略 2.1.2 如何决定选择哪一种 Join 策略 2.2 Physical Plan 2.2.1 EnsureRequirements 规则 3 相关文…...
【Hot100】LeetCode—416. 分割等和子集
目录 题目1- 思路2- 实现⭐152. 乘积最大子数组——题解思路 3- ACM 实现 题目 原题连接:416. 分割等和子集 1- 思路 理解为背包问题 思路: 能否将均分的子集理解为一个背包,比如对于 [1,5,11,5],判断能否凑齐背包为 11 的容量…...
前端开发知识-vue
大括号里边放键值对,即是一个对象。 一、vue可以简化前端javascript的操作。 主要特点是可以实现视图、数据的双向绑定。 使用vue主要分为三个步骤: 1.javascript中引入vue.js 可以src中可以是vue的网址,也可以是本地下载。 2.在javasc…...
【嵌入式硬件】快衰减和慢衰减
1.引语 在使用直流有刷电机驱动芯片A4950时,这款芯片采用的是PWM控制方式,我发现他的正转、反转有两种控制方式,分别是快衰减和慢衰减。 2.理解 慢衰减:相当于加在电机(感性原件)两端电压消失,将电机两端正负短接。 快衰减:相当于加在电机(感性原件)两端电压消失,将电机…...
C语言 | Leetcode C语言题解之第275题H指数II
题目: 题解: int hIndex(int* citations, int citationsSize) {int left 0, right citationsSize - 1;while (left < right) {int mid left (right - left) / 2;if (citations[mid] > citationsSize - mid) {right mid - 1;} else {left mi…...
速盾:网络安全和 CDN 之间的关系是怎样的?
网络安全和内容交付网络(CDN)之间有着密切的关系。网络安全主要涉及保护网络和系统免受各种威胁和攻击,而CDN是一种用于提供更快速、高效和可靠的内容交付服务的技术。在当今数字化和云计算时代,网络安全和CDN之间的关系变得更加紧…...
数据库安全:MySQL安全配置,MySQL安全基线检查加固
「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 这一章节我们需要知道MySQL的安全基线标准和加固方式。 MySQL基线检查 1、更新…...
【SpringBoot】参数传递
1.定义URL变量 RequestMapping("/user/{username}") ResponseBody public String userProfile(PathVariable String username){ return "user:"username; } 2.定义多个URL变量 RequestMapping("/user/{username}/blog/{blogId}") Response…...
Unity 骨骼动画(Skinned Mesh Renderer): 角色动画的高级渲染
在Unity中,骨骼动画(Skinned Mesh Renderer)是一种用于高级角色动画渲染的组件。它允许开发者将复杂的3D模型和动画应用到游戏角色上,实现逼真的视觉效果。本文将探讨Skinned Mesh Renderer的基本概念、使用方法以及如何优化性能。 Skinned Mesh Render…...
花几千上万学习Java,真没必要!(三十四)
1、泛型类: 测试代码: 创建一个Box类; package settest.com; public class Box<T> { // T stands for "Type" - T是一个占位符,用于表示具体的类型 // 类的内部可以使用T作为类型声明变量 private T t; // 构造方法&am…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
