python操作excel

1. 引言

在数据处理和自动化办公领域,Python以其简洁的语法和强大的库,成为许多数据科学家和开发者的首选语言。本文将带你一步步学习如何使用Python操作Excel。

2. 环境准备

在开始之前,请确保你的环境中安装了Python和以下库:

  • pandas:用于数据分析和操作。
  • openpyxl:用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件。

安装命令:

pip install pandas openpyxl

3. 示例表格介绍

假设我们有一个名为sales_data.xlsx的Excel文件,其中包含以下数据:

序号产品名称销售量单价总金额
1产品A100101000
2产品B50201000

4. 读取Excel文件

在这一节中,我们将通过几个具体的示例来展示如何使用Python读取Excel文件中的数据。

4.1 读取整个工作簿

首先,让我们读取整个Excel文件到一个DataFrame:

import pandas as pd

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

# 显示整个DataFrame
print(df)

4.2 读取特定的工作表

如果Excel文件包含多个工作表,我们可以指定读取特定的工作表:

# 读取名为'January'的工作表
df_january = pd.read_excel('sales_data.xlsx', sheet_name='January')

# 显示该工作表的数据
print(df_january)

4.3 指定列的读取

如果我们只对某些列感兴趣,可以指定列来读取:

# 只读取'产品名称'和'总金额'两列
df_selected_columns = pd.read_excel('sales_data.xlsx', usecols=['产品名称', '总金额'])

# 显示选中列的数据
print(df_selected_columns)

4.4 跳过行和列

在读取时,我们可能需要跳过文件开头的一些行或列:

# 跳过前两行,只读取'产品名称'和'总金额'列
df_skipped_rows = pd.read_excel('sales_data.xlsx', skiprows=2, usecols=['产品名称', '总金额'])

# 显示跳过行后的数据
print(df_skipped_rows)

4.5 使用不同的数据类型

Excel文件中的列可能需要被读取为不同的数据类型,例如日期或数值:

# 将'日期'列读取为日期类型
df_date_type = pd.read_excel('sales_data.xlsx', dtype={'日期': 'datetime64'})

# 显示数据,注意日期列的格式
print(df_date_type)

4.6 处理缺失数据

在读取Excel文件时,可能会遇到缺失数据:

# 读取数据,并将缺失值显示为NaN
df_with_na = pd.read_excel('sales_data.xlsx', na_values=['NA', 'N/A'])

# 显示包含缺失值的数据
print(df_with_na)

4.7 读取大型Excel文件

对于大型Excel文件,可以使用openpyxl库来逐块读取数据,以节省内存:

from openpyxl import load_workbook

# 加载工作簿
wb = load_workbook('large_sales_data.xlsx')

# 逐块读取数据
for sheet in wb.sheetnames:
    ws = wb[sheet]
    for row in ws.iter_rows(min_row=1, values_only=True):
        print(row)

4.8 读取带有公式的Excel文件

如果Excel文件中包含公式,我们可能需要读取公式的结果:

# 读取Excel文件,并将公式的结果作为数值读取
df_formulas = pd.read_excel('sales_data.xlsx', engine='openpyxl', dtype=object)

# 显示数据,注意公式列的格式
print(df_formulas)

4.9 保存读取的数据

最后,我们可以将读取的数据保存为新的Excel文件或覆盖原文件:

# 将读取的数据保存为新的Excel文件
df.to_excel('read_sales_data.xlsx', index=False)

# 或者覆盖原文件
df.to_excel('sales_data.xlsx', index=False)

5. 修改Excel数据

在这一节中,我们将通过几个具体的示例来展示如何使用Python对Excel中的数据进行修改。

5.1 更新单个单元格的值

假设我们需要更新产品B的单价为25:

# 定位产品B并更新单价
df.loc[df['产品名称'] == '产品B', '单价'] = 25

# 显示更新后的数据
print(df)

5.2 批量更新数据

如果我们需要将所有产品的单价提高10%:

# 计算新的单价并更新
df['单价'] = df['单价'] * 1.1

# 显示更新后的数据
print(df)

#.3 插入新行

假设我们需要在表格末尾添加一个新的产品:

# 创建新行的数据字典
new_product = {'序号': df['序号'].max() + 1, '产品名称': '产品C', '销售量': 150, '单价': 15, '总金额': 150 * 15}

# 将新行添加到DataFrame中
df = df.append(new_product, ignore_index=True)

# 显示添加新行后的数据
print(df)

5.4 删除行

如果某个产品不再销售,我们需要从表格中删除该行:

# 定位并删除产品B的行
df = df[df['产品名称'] != '产品B']

# 显示删除行后的数据
print(df)

5.5 计算新列

假设我们需要添加一个新列来显示每个产品的总利润(假设利润率为20%):

# 计算总金额和利润
df['总利润'] = df['总金额'] * 0.2

# 显示添加新列后的数据
print(df)

5.6 替换数据

如果需要将所有销售量低于50的产品的销售量更新为50:

# 替换销售量
df.loc[df['销售量'] < 50, '销售量'] = 50

# 显示替换后的数据
print(df)

5.7 使用条件表达式更新数据

假设我们需要将单价高于平均单价的产品的总金额增加10%:

# 计算平均单价
average_price = df['单价'].mean()

# 增加总金额
df.loc[df['单价'] > average_price, '总金额'] = df['总金额'] * 1.1

# 显示更新后的数据
print(df)

5.8 保存修改

最后,将修改后的数据保存回Excel文件:

# 将修改后的DataFrame写入新的Excel文件
df.to_excel('modified_sales_data.xlsx', index=False)

6. 写入和创建Excel文件

将更新后的数据写入新的Excel文件:

# 写入Excel文件
df.to_excel('updated_sales_data.xlsx', index=False)

7. 高级操作:数据筛选和排序

筛选销售量大于50的所有产品,并按总金额降序排序:

# 数据筛选和排序
filtered_sorted_df = df[(df['销售量'] > 50)].sort_values(by='总金额', ascending=False)

# 显示筛选和排序后的数据
print(filtered_sorted_df)

8. 错误处理与最佳实践

在操作Excel文件时,可能会遇到文件不存在、权限问题等错误。使用try-except语句来处理这些异常:

try:
    # 尝试读取Excel文件
    df = pd.read_excel('non_existent_file.xlsx')
except FileNotFoundError:
    print("文件不存在,请检查文件路径。")

欢迎关注VX公众号:行动圆周率
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-----【链表:基础】

链表基础 1、链表的理论基础 1&#xff09;基础&#xff1a; 链表&#xff1a;通过指针串联在一起的线性结构&#xff0c;每个节点由两部分组成&#xff0c;一个是数据域&#xff0c;一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个指针…

2024年必备的15个免费 SVG 设计资源

在动态设计领域&#xff0c;SVG&#xff08;可缩放矢量图形&#xff09;已成为设计师打造响应迅速、清晰且适应性强的视觉效果的必备工具。 这些设计非常适合幻灯片 PowerPoint 演示文稿、应用程序设计、网站设计、原型设计、社交媒体帖子等。 在这篇文章中&#xff0c;我们将…

LeetCode刷题之HOT100之最小栈

听歌&#xff0c;做题&#xff01; 1、题目描述 2、逻辑分析 拿到题目一脸懵&#xff0c;有点看不懂啥意思&#xff0c;看了题解才知道啥意思。要实现在常数时间内检索到最小元素的栈&#xff0c;需要使用一个辅助栈来每次存入最小值。 使用Deque作为栈的实现是因为它提供了…

最热门的智能猫砂盆好不好用?这期统统告诉你!

身为上班族的我们&#xff0c;常常被工作和出差填满日程。忘记给猫咪铲屎也不是一次两次了。但我们必须意识到&#xff0c;不及时清理猫砂盆不仅会让猫咪感到不适&#xff0c;还可能引发泌尿系统感染、皮肤疾病等健康问题。为了解决这个问题&#xff0c;越来越多的铲屎官开始将…

Unity数据持久化3——Json

概述 基础知识 Json文件格式 Json基本语法 练习 可以搜索&#xff1a;Json在线&#xff0c;复制代码进去解析是否写错了。 Excel转Json C#读取存储Json文件 JsonUtility using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine;[Sy…

使用Birdeye访问Sui上加密市场数据

是一个链上加密交易数据聚合器&#xff0c;于2024年4月开始整合Sui数据。 个人DeFi用户可以在Birdeye的首页找到丰富的数据&#xff0c;包括关于主流区块链上的tokens、交易和交易者钱包的详细信息。 Birdeye提供API和WebSockets数据服务&#xff0c;涵盖token价格和其他DeFi…

【jupyter notebook】解决打不开以及安装扩展插件的问题

文章目录 问题描述问题 1解决问题 2解决 问题描述 问题 1 在自定义的虚拟环境下&#xff0c;安装 jupyter notebook 6.4.12 版本时&#xff0c;报以下错误&#xff1a; 解决 查了一些 解决方法&#xff0c;执行以下命令即可解决&#xff1a; conda install traitlets5.9.0 …

PS系统教程27

Photoshop与Camera Raw Camera本身是作为插件存在的&#xff0c;处理对象Raw格式&#xff08;高清格式的图片标准&#xff09; JPG是压缩格式 Camera是源数据包&#xff0c;无损高清数据包 通道 通道只有黑白灰三种颜色&#xff0c;图层类似于前台&#xff0c;通道就是后台…

代码随想录算法训练营第七十天 | 108.冗余连接、109.冗余连接||

108.冗余连接 文字讲解&#xff1a;108. 冗余连接 | 代码随想录 解题思路 节点A 和节点 B 不在同一个集合&#xff0c;那么就可以将两个 节点连在一起 已经判断 节点A 和 节点B 在在同一个集合&#xff08;同一个根&#xff09;&#xff0c;如果将 节点A 和 节点B 连在一起就…

LabVIEW与PLC通讯方式及比较

LabVIEW与PLC之间的通讯方式多样&#xff0c;包括使用MODBUS协议、OPC&#xff08;OLE for Process Control&#xff09;、Ethernet/IP以及串口通讯等。这些通讯方式各有特点&#xff0c;选择合适的通讯方式可以提高系统的效率和稳定性。以下将详细介绍每种通讯方式的特点、优点…

Typora自动保存和找回未保存文件

在用typora做记录的时候没有手动保存&#xff0c;然后电脑崩了&#xff0c;还好有找回未保存文件功能&#xff0c;在这里存一下。 找到未保存的文件版本后将其内容复制到新文件即可。

【AI落地应用实战】如何高效检索与阅读论文——302.AI学术论文工具评测

一、引言 作为一名学术领域的探索者&#xff0c;我们都知道&#xff0c;检索和阅读论文是我们获取知识、启发思考、验证假设的基石&#xff0c;也是日常学习中必不可少的基本功之一。然而在浩瀚的学术海洋中&#xff0c;如何快速、准确地找到我们需要的论文&#xff0c;就像是…

Rust编写测试及控制执行

编写测试及控制执行 在 Rust 中&#xff0c;测试是通过函数的方式实现的&#xff0c;它可以用于验证被测试代码的正确性。测试函数往往依次执行以下三种行为&#xff1a; 设置所需的数据或状态运行想要测试的代码判断( assert )返回的结果是否符合预期 让我们来看看该如何使…

这几个PR小技巧你Get到了吗?

学习是永无止境的&#xff0c;需要不间断地学习&#xff0c;获取新知识。今天带来了5个PR小技巧&#xff0c;可以先收藏起来Adobe Premiere Pro 2024的获取查看Baidu Cloud 1、双倍稳定画面更舒适 一般来说大型电视剧、电影使用的拍摄设备都是非常高端的&#xff0c;不像我们…

Chrome插件:​Vue.js Devtools 高效地开发和调试

在现代前端开发中&#xff0c;Vue.js因其灵活性和性能优势&#xff0c;受到越来越多开发者的青睐。然而&#xff0c;随着项目规模的扩大&#xff0c;调试和优化变得愈发复杂。幸运的是&#xff0c;Vue.js Devtools的出现&#xff0c;为开发者提供了一套强大的工具集&#xff0c…

Unity 弧形图片位置和背景裁剪

目录 关键说明 Unity 设置如下 代码如下 生成和部分数值生成 角度转向量 计算背景范围 关键说明 效果图如下 来自红警ol游戏内的截图 思路&#xff1a;确定中心点为圆的中心点 然后 计算每个的弧度和距离 Unity 设置如下 没什么可以说的主要是背景图设置 代码如下 …

【Deep Learning】Self-Supervised Learning:自监督学习

自监督学习 本文基于清华大学《深度学习》第12节《Beyond Supervised Learning》的内容撰写&#xff0c;既是课堂笔记&#xff0c;亦是作者的一些理解。 在深度学习领域&#xff0c;传统的监督学习(Supervised Learning)的形式是给你输入 x x x和标签 y y y&#xff0c;你需要训…

Vue3 国际化i18n

国际化i18n方案 1. 什么是i18n2. i18n安装、配置及使用2.1 安装2.2 配置2.3 挂载到实例2.4 组件中使用2.5 语言切换 1. 什么是i18n i18n 是“国际化”的简称。在资讯领域&#xff0c;国际化(i18n)指让产品&#xff08;出版物&#xff0c;软件&#xff0c;硬件等&#xff09;无…

数据库系统体系结构-DBMS的三级模式结构、DBMS的工作方式、模式定义语言、二级映射

一、体系结构的概念 1、大多数DBMS遵循三级模式结构 &#xff08;1&#xff09;外模式 &#xff08;2&#xff09;概念模式 &#xff08;3&#xff09;内模式 2、DBMS的体系结构描述的应该是系统的组成结构及其联系以及系统结构的设计和变化的原则等 3、1978年美国国家标…

双向长短期记忆神经网络BiLSTM

先说一下LSTM LSTM 是一种特殊的 RNN&#xff0c;它通过引入门控机制来解决传统 RNN 的长期依赖问题。 LSTM 的结构包含以下几个关键组件&#xff1a; 输入门&#xff08;input gate&#xff09;&#xff1a;决定当前时间步的输入信息对细胞状态的影响程度。遗忘门&#xff…