解决openpyxl操纵带公式的excel或者csv之后,pandas无法读取数值的问题

1 功能特点

  • openpyxl
    • 这是一个专门用于操作Excel文件(.xlsx/.xlsm)的库。它提供了丰富的功能来读取、写入和修改Excel文件的各个元素,如单元格、行、列、工作表等。例如,可以通过openpyxl轻松地创建一个新的Excel工作簿,添加工作表,设置单元格的样式(字体、颜色、对齐方式等)。
    • 可以读取Excel文件中的数据并进行逐行、逐列的处理。比如,以下代码片段展示了如何使用openpyxl读取一个Excel文件中的数据:
python 复制代码
import openpyxl

# 打开工作簿
workbook = openpyxl.load_workbook('example.xlsx')
# 选择工作表
worksheet = workbook['Sheet1']
# 遍历行和列读取数据
for row in worksheet.iter_rows(values_only=True):
    for cell_value in row:
        print(cell_value)
  • pandas
    • pandas是一个强大的数据处理库,主要用于数据的分析、清洗和操作。它提供了高效的数据结构,如DataFrameSeries,可以处理各种类型的数据,包括从CSV文件、数据库、Excel文件等多种数据源获取的数据。
    • 对于数据的分析和转换非常方便。例如,可以使用pandas轻松地对数据进行排序、分组、过滤和聚合操作。以下是一个简单的示例,展示如何使用pandas读取Excel文件中的数据并进行简单的数据分析:
python 复制代码
import pandas as pd

# 读取Excel文件
df = pd.read_excel('example.xlsx')
# 查看数据的前几行
print(df.head())
# 计算某一列的平均值
column_mean = df['column_name'].mean()
print(column_mean)

2 适用场景

  • openpyxl适用场景:
    • 当需要对Excel文件进行细致的格式设置和底层的文件结构操作时,openpyxl是更好的选择。例如,在需要创建具有特定样式的复杂报表,如添加带有各种样式(如不同字体、颜色、边框)的表格、图表,或者需要在Excel文件中插入图像、超链接等元素时,openpyxl可以很好地完成这些任务。
    • 如果主要的工作是和Excel文件本身的交互,比如需要将数据按照Excel的特定格式(如单元格合并、冻结窗格等)进行输出,openpyxl提供了更直接的控制。
  • pandas适用场景
    • 对于数据分析任务,特别是需要对大量数据进行复杂的分析和处理时,pandas是首选。它可以方便地处理缺失数据、进行数据标准化、对数据进行各种统计分析(如计算相关性、协方差等)。
    • 当需要从不同数据源(Excel、CSV、SQL数据库等)整合数据并进行统一处理时,pandas的强大数据结构和功能使其能够轻松地完成数据的读取、合并和转换。例如,在数据挖掘、机器学习项目的前期数据准备阶段,pandas可以高效地清理和预处理数据。
  1. 性能方面
    • openpyxl:在处理大型Excel文件时,如果只是简单的读写操作,性能表现尚可。但是当涉及到大量的数据处理和复杂的计算时,可能会相对较慢,因为它的设计重点是Excel文件的结构和格式操作。
    • pandaspandas在数据处理方面进行了高度优化,对于大量数据的读取、筛选、排序等操作通常具有较高的效率。它使用了一些高效的数据存储和计算方法,能够快速地处理数据,特别是在内存允许的情况下,对大数据集的处理能力更强。

总的来说,openpyxlpandas各有优势。如果你的主要任务是对Excel文件进行精细的格式设置和文件结构操作,选择openpyxl;如果重点是数据分析和处理,pandas会是更好的工具。在实际项目中,有时也可以将两者结合使用,充分发挥它们的优势。

还有就是openpyxl可以保留excle原始的公式、样式等,但是pandas就是纯数据了

3 问题以及解决

目前因为开发需求的原因,因为excel中带了公式,所以我前面用了openpyxl库,然后生成了一个新的文档,这样文档中带有公式的列就会自动更新并产生新的值。

后面因为pandas在大数据处理这块根据优势,因此选择了pandas,但是遇到的问题是当我用pandas打开并且读取带公式那列的时候,读取出来的全是公式字符,即使用pd.read_excel(data_path,engine='openpyxl',sheet_name="日回收")也不行,但我想要的是数字。

后面发现在openpyxl生成后,先打开excle,然后每次都要我保存,保存之后,再执行pandas的那部分代码,发现可以读出值了

但我又不可能每次都要这样操作,通过后续查找资料(这里忘记远处了,忘原谅,借原作者代码一用),可以写一个方法,就是在后台去执行上面的操作,如下

python 复制代码
# filename是文件路径
def just_open(filename):
    xlApp = DispatchEx("Excel.Application")
    xlApp.Visible = False
    xlBook = xlApp.Workbooks.Open(filename)
    xlBook.Save()
    xlBook.Close()

这样就解决了openpyxlpandas的衔接

相关推荐
企鹅侠客5 小时前
开源免费文档翻译工具 可支持pdf、word、excel、ppt
人工智能·pdf·word·excel·自动翻译
小白今天也很酷10 小时前
Python与MCU通信:串口数据采集及CSV/Excel存储方法
python·单片机·excel
xlxxy_14 小时前
ABAP数据库表的增改查
开发语言·前端·数据库·sql·oracle·excel
程序猿多布17 小时前
Unity Excel导表工具转Lua文件
unity·excel
The god of big data21 小时前
Excel核心函数VLOOKUP全解析:从入门到精通
excel
专注VB编程开发20年1 天前
除了 EasyXLS,加载和显示.xlsx 格式的excel表格,并支持单元格背景色、边框线颜色和粗细等格式化特性
c++·windows·excel·mfc·xlsx
永康李1 天前
Pandas:从一个DataFrame中直接索引赋值到另一个索引位置出错的Bug及其解决方案
python·bug·pandas
诸神缄默不语1 天前
Excel如何给单元格填色,以及如何用Python 3实现单元格填色
开发语言·python·excel·openpyxl·patternfill
Lx3522 天前
Pandas高级数据处理:数据安全与隐私保护
pandas
程序员小续2 天前
Excel 表格和 Node.js 实现数据转换工具
前端·javascript·react.js·前端框架·vue·excel·reactjs