【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…...

【代码】Python3|Scrapy框架初探(汽车之家大连市二手车车辆数据爬取、清洗与可视化)
本篇主要是整个项目的介绍,没提到太多琐碎的技术细节,以后有空的话会整理一下 Scrapy 和原生爬虫的差异,还有它坑人的一些地方,单发出来。 开源地址:https://github.com/shandianchengzi/car_home_spider 使用说明&a…...

C#中的new以及类
new关键字的用法 实例化对象:使用 new 关键字可以创建一个类的实例。例如: MyClass obj new MyClass(); 指定构造函数:如果类有多个构造函数,可以使用 new 关键字指定使用哪一个构造函数来创建对象。例如: MyC…...

Hbase简介和快速入门
一 Hbase简介 1 HBase定义 Apache HBase™ 是以hdfs为数据存储的,一种分布式、可扩展的NoSQL数据库。 2 HBase数据模型 HBase的设计理念依据Google的BigTable论文,论文中对于数据模型的首句介绍。Bigtable 是一个稀疏的、分布式的、持久的多维排序map…...

【AI落地应用实战】Amazon Bedrock +Amazon Step Functions实现链式提示(Prompt Chaining)
一、链式提示 Prompt Chaining架构 Prompt Chaining 是一种在生成式人工智能(如大型语言模型)中广泛使用的技术,它允许用户通过一系列精心设计的提示(Prompts)来引导模型生成更加精确、丰富且符合特定需求的内容。 P…...

vue Ref 和 Reactive 原理解析
文章目录 RefReactive Ref ref 的语义是指向一个值的引用,主要用于处理基本数据类型和单一值对象,即对值的引用进行包装和管理,而不是对对象的操作进行拦截,对于基础类型通过 getter 和 setter 实现拦截使用 Proxy 拦截对象的所有…...

【人工智能】Transformers之Pipeline(六):图像分类(image-classification)
目录 一、引言 二、图像分类(image-classification) 2.1 概述 2.2 技术原理 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipeline&#x…...

编程语言漫谈之「初始化与赋值」——以C++和汇编语言为示例
编程语言漫谈之「初始化与赋值」——以C和汇编语言为示例 1. 赋值时汇编做了什么2. 在变量定义时做初始化, 与在使用时才进行初始化, 有区别吗? 1. 赋值时汇编做了什么 当我们在C中写下如下代码: int main() {int a 10;return 0; }这是一个简单的整数类型变量a的初始化赋值…...

windows使用ssh-agent管理私钥
主要有以下几个方面: 开启openssh 的 ssh-agent 服务 打开powershell 输入 Get-Service -Name ssh-agent 查看服务是否起来Start-Service ssh-agent 启动服务Stop-Service ssh-agent 关闭服务将私钥添加到ssh-agent 添加私钥 ssh-add ~/.ssh/id_rsa查询添加哪些私钥 ssh-add -…...

PostgreSQL 之 to_timestamp函数
to_timestamp 是 PostgreSQL 中的一个函数,用于将字符串或数字转换为时间戳。以下是关于 to_timestamp 的详细介绍: 引入版本 to_timestamp 函数在 PostgreSQL 7.3 版本中引入。 语法 to_timestamp 有两种主要的用法: 1.将字符串转换为时间戳 to_timestamp(text, text)第…...

USB3.0的等长要求到底是多少?
USB2.0与USB3.0接口的PCB布局布线要求PCB资源PCB联盟网 - Powered by Discuz! (pcbbar.com) 90欧姆阻抗,走差分线: 重点来了:...