【Python从入门到进阶】61、Pandas中DataFrame对象的操作(二)

news2024/9/17 7:17:05

接上篇《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.coloradmin.cn/o/1957707.html

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

相关文章

Selenium Java中的isDisplayed()方法

isDisplayed()方法用于确定元素是否可见。本文将详细讨论 的WebElement接口isDisplayed()方法。 方法声明- boolean isDisplayed()它能做什么?此方法用于判断元素是否显示。这个方法节省了我们…

EasyExcel入门

目录 一、文章简介 二、概念 1.EasyExcel是什么? 2.EasyExcel 能用在哪里? 3.为什么要选用EasyExcel解析excel? 4.如何使用EasyExcel? 三、EasyExcel快速入门 1.环境搭建 2.简单写excel 代码示例 TestFileUtil Employe…

C++(week14): C++提高:(二)C++11线程库

文章目录 一、线程1.C11线程库的概述2.构造函数3.线程启动: 线程入口函数的传递方式4.线程终止5.线程状态6.获取线程id:get_id() 二、互斥锁1.什么是互斥锁2.头文件3.常用函数接口 三、lockguard与unique_lock1.lock_guard2.unique_lock(1)概念(2)函数接口 3.原子数…

Python脚本:使用PyPDF2给一个PDF添加上页数/总页数标签

一、实现代码 import PyPDF2 from PyPDF2 import PdfWriter from PyPDF2.generic import AnnotationBuilder# 指定输入和输出pdf pdf_path rC:\Users\ASUS\Desktop\temp\xxxx.pdf out_path rC:\Users\ASUS\Desktop\temp\xxxx2.pdf# 创建 PdfWriter 对象 writer PdfWriter()…

Python转换Excel文件为SVG文件

SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式。这种格式在Web开发和其他图形应用中非常流行,提供了一种高效的方式来呈现复杂的矢量图形。如果我们需要在网页中嵌入Excel表格,或是直接使用Excel工作表制作网页&…

基于元神系统编写“清屏”程序

1. 背景 本文介绍了基于元神系统开发软件的操作流程,并详细介绍了“清空屏幕”程序的编写以及测试结果。 2. 方法 (1)编写程序 在元神系统0.4版的基础上,用FASM汇编语言进行软件开发。假设屏幕为80列25行的文本显示模式&#…

【更新2022】各省农业科技活动经费(RD)测算 1999-2022 无缺失

各省农业科技活动经费(R&D)测算数据在农业经济学、政策研究和农村发展规划等领域的论文研究中具有重要应用价值。首先,这些数据可以用于分析不同省份在农业科技投入上的差异及其对农业生产力和产出的影响,帮助揭示不同地区农业…

Node.js版本管理工具之NVM

目录 一、NVM介绍二、NVM的下载安装1、NVM下载2、卸载旧版Node.js3、安装 三、NVM配置及使用1、设置nvm镜像源2、安装Node.js3、卸载Node.js4、使用或切换Node.js版本5、设置全局安装路径和缓存路径 四、常用命令技术交流 博主介绍: 计算机科班人,全栈工…

坐牢十八天 20240729(IO)

一.笔记 1. 有关系统时间的函数 1> 有关时间的函数 #include <time.h> time_t time(time_t *tloc); 功能&#xff1a;获取系统时间&#xff0c;从1970年1月1日0时0分0秒&#xff0c;到目前累计的秒数 参数&#xff1a;用于接收的秒数 返回值&#xff1a;秒数使…

【每日刷题】Day89

【每日刷题】Day89 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 2. 155. 最小栈 - 力扣&#xff0…

Open3D 计算点云质心

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、概述 1.1原理 在Open3D中&am…

成为git砖家(8): 使用 git log 查询范围内的 commit

文章目录 1. 查询 git log 的文档2. 不带任何参数: git log 啥意思&#xff1f;3. git log 最主要功能是什么&#xff1f;4. git log <commit1>..<commit2> 什么意思5. 查看最近n次commit6. References 1. 查询 git log 的文档 git help log --web市面上针对 git …

从善如流之您最亲近人之善,肯出力之象-下学而上达

您最亲近人之善&#xff0c;肯出力之象&#xff0c;就是那个爬&#xff0c;甚至于跪倒在地上&#xff0c;抹那个下水井子。这或许就是那个马云大佬讲过的&#xff0c;就是从您最近距离&#xff0c;身边的人学习。人家为啥做的好&#xff0c;出色&#xff1f;而且您是一母同胞之…

太坑了!RabbitMQ+PHP开发的辛酸经历

博主介绍&#xff1a;全网粉丝10w、CSDN合伙人、华为云特邀云享专家&#xff0c;阿里云专家博主、星级博主&#xff0c;51cto明日之星&#xff0c;热爱技术和分享、专注于Java技术领域 &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅…

设计模式:模板方法模式:封装不变,扩展可变

目录 一、模板方法模式的定义与结构 二、模板方法模式的优点 三、模板方法模式的示例 示例一&#xff1a; 示例二&#xff1a; 四、总结 在软件开发中&#xff0c;设计模式是解决常见问题的可复用方案。其中&#xff0c;模板方法模式是一种行为型设计模式&#xff0c;它在不…

lora微调Qwen模型全流程

LoRA 微调 Qwen 模型的技术原理概述 LoRA&#xff08;Low-Rank Adaptation&#xff09;是一种用于大模型高效微调的方法。通过对模型参数进行低秩分解和特定层的微调&#xff0c;LoRA 能在保持模型性能的前提下显著减少训练所需的参数量和计算资源。接下来是对 LoRA 微调 Qwen…

Matlab编程资源库(9)数据插值与曲线拟合

一、一维数据插值 在MATLAB中&#xff0c;实现这些插值的函数是interp1&#xff0c;其调用格式为&#xff1a; Y1interp1(X,Y,X1,method) 函数根据X,Y的值&#xff0c;计算函数在X1处的值。X,Y是两个等长的已知向量&#xff0c;分别描述采样点和样本值&#xff0c;X1是一个向量…

【机器学习基础】初探机器学习

【作者主页】Francek Chen 【专栏介绍】⌈Python机器学习⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;依赖于强大的开…

vue项目引入live2d保姆级教程--web端、多种方法

一、自建live2d运行 1、选择SDK——live2d Cubism SDK &#xff08;1&#xff09;链接&#xff1a;Live2D Cubism SDK | Live2D Cubism 打开网站&#xff0c;它长这样&#xff1a; &#xff08;2&#xff09;选择web &#xff0c;到下个页面 &#xff08;3&#xff09;下…