【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#与欧姆龙PLC 通信——fins udp协议

前言 欧姆龙PLC在工控领域占有很大的市场份额,在上位机编程领域,实现上位机和欧姆龙PLC的通信也是必备的技能,上位机和PLC可以通过fins udp和fins tcp协议通信,本文介绍的是fins udp协议,该协议具有传输速度快的特点,为了帮助大家学习fins udp协议,我编写了“欧姆龙Fin…

从零开始学习网络安全渗透测试之基础入门篇——(四)反弹SHELL不回显带外正反向连接防火墙出入站文件上传下载

一、反弹SHELL 反弹SHELL(Reverse Shell)是一种网络攻击技术,它允许攻击者在一个被入侵的计算机上执行命令,即使该计算机位于防火墙或NAT(网络地址转换)之后。通常,当攻击者无法直接连接到目标…

堡垒机介绍

堡垒机,也被称为跳板机、跳板服务器或堡垒服务器,是一种网络安全设备,它在网络安全领域扮演着重要角色。以下是关于堡垒机的详细解析: 一、定义与功能 定义:堡垒机是一种用于控制和管理网络安全的重要工具&#xff0…

不要对数组使用多态

类继承的最重要的特性是你可以通过基类指针或引用来操作派生类。这样的指针或引用具有行为的多态性,就好像它们同时具有多种形态。C允许你通过基类指针和引用来操作派生类数组。不过这根本就不是一个特性,因为这样的代码几乎从不如你所愿地那样运行。 假…

基于OPENMV实现一个单目测速测试

1、测试平台:OpenMV4H7Plus开发板​ 使用的相机是 MT9V034 相机对应为752x480黑白图像,为全局快门 2、测速的时候,仅选取最大物体的抓取,这里采用了几个步骤: ①、直接计算灰度的帧差 ②、对帧差进行阈值处理以获取mot…

【代码随想录训练营第42期 Day7打卡 LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

目录 一、做题心得 二、题目及题解 454.四数相加II 题目链接 题解 383. 赎金信 题目链接 题解 15. 三数之和 题目链接 题解 18. 四数之和 题目链接 题解 三、小结 一、做题心得 今天是代码随想录训练营打卡的第七天,做的也是同昨天一样的哈希表部分…

CUDA编程之grid和block详解

CUDA 文章目录 CUDAgrid和block基本的理解1维 遍历2维 遍历3维 遍历3维 打印对应的thread grid和block基本的理解 Kernel:Kernel不是CPU,而是在GPU上运行的特殊函数。你可以把Kernel想象成GPU上并行执行的任务。当你从主机(CPU)调…

使用Chainlit接入通义千问快速实现一个多模态的对话应用

开通灵识服务 首先需要到阿里云-模型服务灵积开通账户,获得apiKey 模型服务灵积 https://dashscope.aliyun.com/ 进入控制台 ,在API-KEY管理里,创建一个新的API-KEY,然后保存起来,后面会用到。 模型服务灵积服务所有API文档地址…

数据结构:构建数字世界的基石

在数字化时代,数据已成为推动社会进步与经济发展的核心驱动力。而数据结构,作为计算机科学的基础与核心,是存储、组织和管理这些海量数据的基石。无论是简单的应用程序还是复杂的系统架构,都离不开高效、灵活的数据结构支持。本文…

KUKA机器人外部自动IO信号经验分享

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

k8s学习--k8s集群部署kubesphere的详细过程

文章目录 kubesphere简介k8s群集部署kubespere环境准备工作一、配置nfs二、配置storageclass三、kubesphere开启服务(devops) kubesphere简介 下面是官方文档描述 KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多…

【python】最新版抖音js逆向拿到数据,非常详细教程(附完整代码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

如何压缩pdf文件大小?这5种方法,简单又实用!

如何压缩pdf文件大小?pdf是电脑常用的便携式文档格式,无论是在学术领域的论文发表,还是在商业场景中的合同签署,甚至是个人简历的提交,PDF文件都扮演着重要的角色。 电脑上存储pdf文件会面临一个难题,那就是…

收不到验证码邮件怎么办?快速排查与解决!

收不到验证码邮件有哪些应对策略?验证码邮件被拦截? 经常需要通过邮箱接收验证码邮件来完成各种操作。然而,许多人都会遇到收不到验证码邮件的情况。AokSend将详细介绍如何快速排查和解决收不到验证码邮件的问题。 收不到验证码邮件&#x…

Vue 项目部署后首页白屏问题排查与解决

引言 在部署 Vue.js 项目时,有时会遇到首页加载后出现白屏的情况,这可能是由于多种原因造成的。本文将介绍一些常见的排查方法和解决方案,帮助开发者快速定位问题并解决。 1. 常见原因分析 首页白屏的问题可能由以下几个方面的原因导致&am…

深入探索CSS3的Media Query:打造响应式网页设计的利器

在今天的互联网世界中,随着设备种类和屏幕尺寸的多样化,响应式网页设计(Responsive Web Design, RWD)已成为不可或缺的一部分。CSS3中的Media Query正是这一设计理念的实现利器,它允许开发者根据用户的设备特性和屏幕尺…

C++ 模板初级

引入 在讲函数模板之前就要先讲讲函数重载了 #include <iostream> using namespace std;int add(int a, int b) {return a b; }double add(double a, double b) {return a b; }int main() {cout << add(2, 3) << endl; cout << add(2.5, 3.7)…

pake 打包TodoList windows桌面应用exe

参考&#xff1a; rust安装 https://blog.csdn.net/weixin_42357472/article/details/125943880 pake网址 https://github.com/tw93/Pake 支持把网页打包成多终端应用 离线网站打包参考&#xff1a; https://github.com/tw93/Pake/wiki/Pake%E6%89%93%E5%8C%85%E9%9D%99%E6%8…

uniapp 小程序内嵌H5链接返回到小程序(亲测)

使用 weixin-js-sdk&#xff0c;特别注意的是&#xff0c;在vue项目中之前安装过 weixin-js-sdk 的&#xff0c;一定要要跟新&#xff0c;但是好像只可以更新到1.6.0版本&#xff0c;而微信要求最低版本是1.6.4&#xff0c;不过不影响使用。 安装weixin-js-sdk npm install w…

Unity Transform组件实现动画:基础与进阶技巧

在Unity中&#xff0c;Transform组件是控制游戏对象&#xff08;GameObject&#xff09;位置、旋转和缩放的核心组件。通过编程控制Transform组件&#xff0c;开发者可以创建各种动画效果。本文将介绍如何使用Transform组件实现动画&#xff0c;从基础的运动到更高级的动画技巧…