【python】Pandas处理Excel表格用法分析与最佳实践

news2024/9/29 13:22:08

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:数据分析系统化教学,零基础到进阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Pandas处理Excel数据的详细用法教程
    • 安装Pandas库
    • 读取Excel文件
      • 读取整个Excel文件
      • 读取多个工作表
    • 查看数据
      • 基本查看
      • 详细信息
    • 选择数据
      • 单列或多列选择
      • 基于标签或位置选择
    • 数据清洗
      • 处理缺失值
      • 替换值
      • 更改数据类型
      • 重复值处理
    • 数据排序
    • 数据筛选
      • 使用条件表达式
      • 使用`query()`方法
      • 布尔索引
    • 数据分组与聚合
    • 数据合并与连接
      • 使用merge()
      • 使用join()
      • 使用concat()
    • 保存数据到Excel
    • 数据转换
    • 时间序列数据
    • 数据可视化
    • 性能优化
    • 注意事项和最佳实践

Pandas处理Excel数据的详细用法教程

Pandas是Python中一个非常强大的数据处理库,它提供了快速、灵活和表达式丰富的数据结构,旨在使“关系”或“标签”数据的处理工作变得既简单又直观。在处理Excel数据时,Pandas的read_excel函数及其后续的数据处理功能尤为关键。本教程将结合实际案例,详细介绍Pandas如何读取、处理、分析并保存Excel数据。

安装Pandas库

首先,确保你已经安装了Pandas库。如果还没有安装,可以通过pip命令进行安装:

pip install pandas

此外,由于Pandas使用openpyxlxlrd等库来读取Excel文件,因此可能还需要安装这些依赖库。对于.xlsx文件,推荐使用openpyxl

pip install openpyxl

读取Excel文件

读取整个Excel文件

假设我们有一个名为data.xlsx的Excel文件,我们可以使用read_excel函数读取该文件:

import pandas as pd

# 读取Excel文件
df = pd.read_excel('data.xlsx')

# 显示前几行数据
print(df.head())

默认情况下,read_excel会读取Excel文件的第一个工作表。如果你需要读取特定的工作表,可以通过sheet_name参数指定:

df = pd.read_excel('data.xlsx', sheet_name='Sheet2')

读取多个工作表

如果你需要同时读取多个工作表,可以指定sheet_name为工作表名的列表,或者None来读取所有工作表。如果指定为None,函数将返回一个有序字典(OrderedDict),其中键为工作表名,值为对应的DataFrame:

xls = pd.ExcelFile('data.xlsx')
dict_dfs = pd.read_excel(xls, sheet_name=None)

# 访问特定工作表的DataFrame
df_sheet1 = dict_dfs['Sheet1']
print(df_sheet1.head())

查看数据

基本查看

一旦数据被读取到DataFrame中,我们可以使用多种方法来查看数据。head()tail()函数分别用于查看数据的前几行和后几行:

# 查看前5行数据
print(df.head())

# 查看后5行数据
print(df.tail())

详细信息

info()函数提供了DataFrame的详细信息,包括每列的名称、数据类型以及非空值的数量:

print(df.info())

describe()函数则提供了数值列的统计信息,如计数、均值、标准差、最小值、四分位数和最大值:

print(df.describe())

选择数据

单列或多列选择

通过列名,我们可以选择DataFrame中的单列或多列数据:

# 选择单列
column_data = df['列名']

# 选择多列
columns_data = df[['列名1', '列名2']]

基于标签或位置选择

Pandas提供了.loc[].iloc[]方法来基于标签(即行索引或列名)或整数位置来选择数据:

# 基于标签选择
row_data = df.loc[row_index, '列名']

# 基于位置选择
row_data_position = df.iloc[row_position]

.at[].iat[]方法则用于选择单个值,分别基于标签和位置:

# 基于标签选择单个值
value = df.at[row_label, '列名']

# 基于位置选择单个值
value_position = df.iat[row_position, column_position]

数据清洗

处理缺失值

缺失值是数据清洗中常见的问题。Pandas提供了多种方法来处理这些值:

  • 使用dropna()删除包含缺失值的行或列。
  • 使用fillna(value)用指定的值填充缺失值。
# 删除包含缺失值的行
df_cleaned = df.dropna()

# 用0填充缺失值
df_filled = df.fillna(0)

替换值

replace()方法允许我们替换DataFrame中的值:

# 替换特定值
df_replaced = df.replace(to_replace=某个值, value=新值)

更改数据类型

在处理Excel数据时,经常需要更改列的数据类型以符合分析或计算的需求。Pandas提供了astype()方法来实现这一点。

# 假设'date_column'列原本为字符串类型,我们需要将其转换为日期类型
df['date_column'] = pd.to_datetime(df['date_column'])

# 或者,如果整列都需要转换为另一种数据类型
df['numeric_column'] = df['numeric_column'].astype(float)

注意,pd.to_datetime()是Pandas提供的一个非常有用的函数,用于将字符串转换为日期时间对象。

重复值处理

数据中可能存在重复的行,这可能会影响分析的结果。Pandas提供了drop_duplicates()方法来删除重复的行。

# 删除所有重复的行,保留第一次出现的行
df_unique = df.drop_duplicates()

# 也可以指定一个或多个列来识别重复项
df_unique_by_column = df.drop_duplicates(subset=['column1', 'column2'])

数据排序

Pandas提供了sort_values()sort_index()方法来对数据进行排序。

  • sort_values()根据列的值进行排序。
  • sort_index()根据行索引进行排序。
# 根据某一列的值进行排序
df_sorted = df.sort_values(by='column_name', ascending=False)

# 根据索引进行排序
df_sorted_by_index = df.sort_index()

数据筛选

Pandas提供了多种方式来筛选数据,包括使用条件表达式、query()方法或布尔索引。

使用条件表达式

# 筛选满足条件的行
filtered_df = df[(df['column1'] > 10) & (df['column2'] == 'value')]

使用query()方法

query()方法允许你以字符串的形式编写筛选条件,这可以使代码更加清晰易读。

# 使用query方法筛选数据
filtered_df = df.query('column1 > 10 and column2 == "value"')

布尔索引

布尔索引是Pandas中最强大的数据筛选方法之一,它基于条件表达式的结果(布尔值)来选择数据。

# 创建一个布尔序列
mask = (df['column1'] > 10) & (df['column2'] == 'value')

# 使用布尔序列筛选数据
filtered_df = df[mask]

数据分组与聚合

Pandas的groupby()方法允许你根据一个或多个键将数据分组,然后对每个组应用聚合函数。

# 根据某一列的值进行分组,并对另一列应用聚合函数
grouped = df.groupby('group_column')['value_column'].mean()

# 或者,使用agg()方法应用多个聚合函数
grouped_multiple = df.groupby('group_column').agg({'value_column1': 'mean', 'value_column2': 'sum'})

数据合并与连接

Pandas提供了多种方法来合并和连接DataFrame,包括merge()join()concat()

使用merge()

merge()方法类似于SQL中的JOIN操作,用于根据一个或多个键合并两个DataFrame。

# 假设df1和df2是两个DataFrame,它们有一个共同的列'key'
merged_df = pd.merge(df1, df2, on='key', how='inner')

使用join()

join()方法主要用于在索引上合并DataFrame。

# 假设df1和df2有相同的索引
joined_df = df1.join(df2, lsuffix='_left', rsuffix='_right')

使用concat()

concat()方法用于沿着一条轴将多个对象堆叠到一起。

# 沿着行方向堆叠两个DataFrame
concatenated_df = pd.concat([df1, df2], ignore_index=True)

保存数据到Excel

处理完数据后,你可能需要将结果保存回Excel文件。Pandas的to_excel()方法允许你这样做。

# 将DataFrame保存到新的Excel文件
df.to_excel('output.xlsx', index=False)

# 如果要保存到特定的工作表,并保留原有的工作表,可以使用ExcelWriter
with pd.ExcelWriter('output_with_sheets.xlsx', mode='a', if_sheet_exists='replace') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)

    # 如果需要添加更多DataFrame到同一个Excel文件的不同工作表
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

注意:在上面的ExcelWriter示例中,mode='a'表示以追加模式打开文件(如果文件已存在)。然而,当指定if_sheet_exists='replace'时,如果工作表已存在,它会被替换,这意呀着实际上在追加模式下这个参数的行为更像是在每次写入时都替换同名的工作表。如果你确实需要保留工作表而不替换它们,并且文件已经存在,你可能需要先检查哪些工作表存在,然后只添加新的工作表或更新现有的工作表。

另外,如果你使用的是openpyxl作为引擎(Pandas在写入.xlsx文件时的默认引擎),请注意openpyxl不支持在同一ExcelWriter实例中多次打开相同的文件(即使是在不同的with语句块中),除非你关闭了ExcelWriter并重新打开它。但是,在上面的示例中,由于我们使用了with语句,ExcelWriter会在块结束时自动关闭,所以通常不需要手动关闭它。

当然,我们可以继续探讨Pandas在数据处理中的一些高级应用和技巧。

数据转换

Pandas提供了强大的数据转换功能,包括应用自定义函数、使用applymap()在DataFrame的每个元素上应用函数等。

# 使用apply函数在DataFrame的列上应用自定义函数
def custom_function(x):
    # 对x执行一些操作
    return x * 2

df['transformed_column'] = df['original_column'].apply(custom_function)

# 使用applymap在DataFrame的每个元素上应用函数(注意:这通常用于DataFrame的所有元素都是相同类型的情况)
df_transformed = df.applymap(lambda x: x.upper() if isinstance(x, str) else x)  # 仅作为示例,实际应用中可能不适用

时间序列数据

Pandas的Timeseries功能非常强大,特别是处理时间序列数据时。datetime类型列可以被转换为时间序列索引,以便进行时间序列分析。

# 假设'date_column'已经是datetime类型
df.set_index('date_column', inplace=True)

# 现在df是一个时间序列DataFrame
# 你可以使用resample方法进行时间频率的转换或聚合
resampled_df = df.resample('M').mean()  # 按月重新采样并计算均值

数据可视化

虽然Pandas本身并不直接提供高级的数据可视化功能,但它与Matplotlib、Seaborn等库无缝集成,可以轻松地进行数据可视化。

import matplotlib.pyplot as plt

# 绘制DataFrame的某一列的直方图
df['column_name'].hist(bins=30)
plt.show()

# 使用Seaborn进行更复杂的可视化
import seaborn as sns

sns.heatmap(df.corr(), annot=True)  # 绘制相关性热力图
plt.show()

性能优化

当处理大型数据集时,性能成为一个关键问题。以下是一些优化Pandas操作性能的建议:

  • 避免在循环中迭代DataFrame的行:Pandas是为向量化操作而设计的,因此在循环中迭代行通常会比使用Pandas内置的向量化方法慢得多。
  • 使用适当的数据类型:选择适当的数据类型可以显著减少内存占用和提高性能。
  • 使用chunksize进行大型文件的分批读取
  • 使用query()方法进行复杂的筛选:虽然query()方法在代码可读性方面优于布尔索引,但在某些情况下,它也可能比布尔索引更快。
  • 利用多核CPU:对于高度并行的任务,可以考虑使用DaskModin等库,它们为Pandas提供了分布式或并行计算的支持。

通过结合使用这些高级功能和最佳实践,你可以更高效地利用Pandas来处理和分析Excel数据。

注意事项和最佳实践

  1. 内存管理:处理大型Excel文件时,注意内存使用情况。如果可能,尝试在读取文件时只加载必要的数据列和行。

  2. 数据类型:在读取数据时,注意列的数据类型是否正确。Pandas会根据数据内容自动推断数据类型,但有时候这种推断并不准确。

  3. 错误处理:在读取或写入文件时,添加错误处理逻辑来捕获并处理可能发生的异常,比如文件不存在、权限问题等。

  4. 性能优化:对于大型数据集,考虑使用chunksize参数在read_excel中逐块读取数据,或者使用Dask等并行处理库来加速数据处理过程。

  5. 版本兼容性:确保你安装的Pandas和依赖库(如openpyxl)是最新版本,或者至少是彼此兼容的版本。

  6. 备份原始数据:在处理数据之前,始终备份原始数据,以防不小心丢失或损坏。

  7. 文档和注释:对于复杂的数据处理流程,编写详细的文档和代码注释,以便将来能够轻松理解和维护代码。

通过遵循这些最佳实践,你可以更有效地使用Pandas处理Excel数据,并确保数据处理的准确性和可靠性。

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

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

相关文章

AI大模型03:Function Calling

接口Interface (1)人际交互接口 UI (User Interface) (2)应用程序编程接口 API (Application Programming Interface) 接口能通的关键:是两方都要遵守约定。 &#xff0…

EI检索,2天录用,3天见刊!截稿在即,这本水刊你还不投吗?

点击关注:关注GZH【欧亚科睿学术】,GET完整版2023JCR分区列表! 🎉 🎉 🎉 🎉 恭喜!这本毕业水刊仅2天录用!3天见刊! 重要时间节点如下 2024-08-03 Sub…

360安全大模型为什么是“非卖品”?

大模型虽然不是万能的,但是没有大模型又是万万不能的。以AI大模型为动力引擎,AI正在重塑各行各业,并快速“飞入寻常百姓家”。 AI安全 以“模”制“模” 2024年全国两会,“人工智能”首次被写入政府工作报告。报告中提出&#xff…

Vue3 搭建前端工程,并使用idea配置项目启动

1 下载node.js 先下载 node.js LTS 并安装:node.js 的 npm,用于管理前端项目包依赖,这里以 14.17.3 这个版本为例。如果已经安装过 node.js,可以在设置中找到应用,点进去搜索 node.js 即可卸载 node.js 14.17.3 安装…

人生感悟|该如何最大化提升个人价值?

哈喽,你好啊,我是雷工! 你肯定也听到过这个观点:人际关系的本质是价值交换,社会的本质就是价值互换。 我们立足社会,无论是上班还是创业,本质上都是在互换价值。 那么我们该如何最大化提升我…

Linux IPC-管道

前言 前面我们已经对进程概念、进程控制做了介绍!本期开始将来介绍进程的最后一章进程间通信,即如何让两个进程进行通信!本博客主要介绍管道! 本期内容介绍 • 初识进程间通信 • 管道 一、初识进程间通信 1、进程间通信的概念…

基于Java+SpringBoot+Vue的教师工作量管理系统

基于JavaSpringBootVue的教师工作量管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式&#x1f345…

OpenAi not returning result and exited with code=0

题意:OpenAi 没有返回结果,程序以代码 0 退出 问题背景: Im trying to use OpenAI, but I cant get a result. Im accessing the API via Visual Studio Code. I have downloaded these extensions for Visual Studio Code: Code Runner and…

Bash考古以及 StackOverflow的2024年度技术统计报告

0.缘起 前段时间,有一次调试.sh时废了好大功夫,单独执行各行指令,可以,但是存储为.sh就不行了,最终发现,我漏加了文件头部的那个声明: #!/bin/bash https://wikimili.com/en/Stephen_R._Bourne…

代发考生战报:考试通过 H12-831科目

代发考生战报:考试通过 H12-831科目,同事2人分别2天考HCIP续认证,考试题基本都是题库里的,印象有1-2个题是新题,也许是自己没记准,题库更新很及时,题库看会了考试很简单,考试半个小时…

认识Modbus RTU与Modbus TCP

(选自成都纵横智控-Modbus RTU与Modbus TCP协议区别详解 ) Modbus RTU 和 Modbus TCP 是两种常用的工业通信协议,用于连接电子设备,但它们在多方面有所不同。以下是它们的详细比较: Modbus RTU 协议类型: …

【精通Redis】Redis持久化和复制

文章目录 前言一、Redis持久化1.1 RDB快照手动触发自动触发save和bgsave的区别 1.2 AOF持久化appendonly配置 二、Redis复制2.1 开启Redis主从复制2.2 Redis复制的启动过程 前言 本文主要讨论Redis的持久化方式和复制特性。Redis的持久化方式有两种,一种叫RDB&…

越秀大悦城·天悦海湾 | 繁华底色 北方头等地标

每一座骄傲的城市,都以奔涌向前的气魄,屹立时代潮头。每一处让城市仰望的居所,亦怀揣与城市共美好的磐心,以焕新的生活方式致敬理想生活家。 越秀大悦城天悦海湾,踞青岛北站旁创新创业活力区,以优越生态基…

望获实时Linux与EtherCAT的硬实时解决方案

在追求极致实时性与可靠性的工业自动化领域,望获实时Linux以其卓越的实时性能和广泛的兼容性,正逐步成为工业控制领域的核心力量。结合EtherCAT这一高效通信协议,我们共同打造了一套创新的硬实时工业控制方案,旨在满足现代工业对快…

怎样批量音频格式转换?5个方法帮你搞定

炎炎夏日的到来,大学生们也迎来了期盼已久的暑期生活。对于无论是计划外出旅行,还是宅在家中享受悠闲时光的朋友们来说,音乐总是不可或缺的伴侣。 然而,面对不同设备对音频格式的要求,如何轻松转换音频格式&#xff0…

数组下标越界异常(ArrayIndexOutOfBoundsException)以及解决方案

在Java学习的初期,我们往往可能会遇到一些程序的错误提示,告诉我们,程序出现了某些不正常的情况,在这种情况发生时,我们一般称之为出现了异常。 我们目前有两类常见的错误: 一个是编译时异常 &#xff0c…

PicGo + gitee 免费搭建个人图床

目录 1 图床概念2 使用gitee和PicGo搭建图床流程2.1 下载安装PicGo工具 3 图片上传错误处理3.1 PicGo客户端提示404错误信息图片上传失败3.2 PicGo客户端提示400错误信息图片上传失败 1 图床概念 ​ "图床"是一个网络术语,它指的是一种用于存储和托管图片…

springboot基于微信小程序的旅游攻略-计算机毕业设计源码96432

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.1.1技术可行性 2.1.2经济可行性 2.1.3操作可行性 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 …

实用python代码之修改图片大小

前言 通过这段代码可以修改图片的像素尺寸大小 运行截图如下 代码如下: import tkinter as tk from tkinter import filedialog, messagebox, colorchooser from PIL import Image, ImageDrawclass ImageProcessorApp:def __init__(self, root):self.root rootse…