Python中的pandas如何读取excel中指定单元格的值?

为了进一步带大家了解各个库的异同,从而在不同场景下可以灵活使用,本文将横向比较7个可以操作 Excel 文件的常用模块,在比较各模块常用操作的同时进行巩固学习!

首先让我们来整体把握下不同库的特点

  1. xlrdxlwtxlutils 各自的功能都有局限性,但三者互为补充,覆盖了Excel文件尤其是 .xls 文件的操作。xlwt 可以生成 .xls 文件,xlrd 可以读取已经存在的 负责写、xlutils 负责提供辅助和衔接
  2. xlwings 能够非常方便的读写 Excel 文件中的数据,并且能够进行单元格格式的修改
  3. XlsxWriter 是一个用来写 .xlsx 文件格式的模块。它可以用来写文本、数字、公式并支持单元格格式化、图片、图表、文档配置、自动过滤等特性。但不能用来读取和修改 Excel 文件
  4. pandas 大家都不陌生,是进行数据处理和分析的强大模块,有时也可以用来自动化处理Excel

如果你懒得看详细的对比过程,可以直接看最后的总结图,然后拉到文末收藏点赞就算学会了

7个模块均为非标准库,因此都需要在命令行中 pip 进行安装:

多数模块可以直接通过名字导入,有些模块约定俗称会使用缩写:

xlutils 模块是 xlrdxlwt 之间的桥梁,最核心的作用是拷贝一份通过 xlrd 读取到内存中的 .xls 对象,然后再拷贝对象上通过 xlwt 修改 .xls

并不是所有7个模块都可以读取 Excel 文件,而即使能读取Excel文件也要分不同后缀名进行讨论,具体如下:

如果读取 .xls 文件会报错:

接下来比较四个模块在同一配置电脑下读取 10MB .xlsx 文件的时间(运行3次求平均值),所用代码为:

最后测试的结果是,xlwings 读取 10MB 文件最快,xlrd 次之,openpyxl 最慢(因电脑而异,结果仅供参考)

读入 Excel 文件部分的表格总结如下:

针对上述4个可以读取 Excel 文件的模块,进一步讨论其获取工作表 sheet 的方式

可以通过 sheet 名查找:

xlwings 的工作表分为活动工作表以及指定工作簿下的特定工作表:

.active 方法默认获取工作簿的第一张工作表

另外也可以通过工作表名指定获取工作表:

单独获取工作表完全没有 pandas 什么事情,因为读取文件的同时已经且必须指定工作表才能读取:

简单总结创建 Excel 文件的情况:

xlwings可以创建 .xls.xlsx 文件,只需要最后保存时写清楚后缀即可。使用如下命令:

无论是新建还是打开都需要保存工作簿、关闭工作簿、关闭程序,即:

openpyxl可以创建 .xls.xlsx 文件,只需要最后保存时写清楚后缀即可。使用如下命令:

pandas 只需要最后转存时写清楚后缀即可。实际上比较抽象,pandas 并不需要一开始先创建一个 Excel 文件,可以围绕数据框做各式操作后用 .to_excel 命令再用 .xls 或者 .xlsx 做文件后缀。如果一定要产生一个空白 Excel

简单总结保存 Excel 文件的情况:

获取单元格的值基本前提是能够读取文件,因此基本围绕 xlrdxlwingsopenpyxlpandas 介绍。xlutils 由于能够复制一份 .xls 因此也可以使用和 xlrd 完全一样的读取单元格方法。

xlutils 因为是直接拷贝一份 xlrd 适用的对象,读取单元格使用的方法和 xlrd 完全一样。xlwt 没有读取单元格的能力

还是先简单总结对 Excel 文件写入数据的情况:

  1. xlrd 不能写入数据
  2. xlwt 可以写入数据
  3. pandas 将 Excel 文件读取为数据框后,是抽象出数据框层面进行操作,没有了对 Excel 进行单元格写入和修改的概念

代码中的 new_format 是之前预设好的样式,下文会进行介绍

依旧简单总结对 Excel 文件样式调整的情况:

  1. xlwt 可以调整样式

xlwt 支持调整字体、边框、颜色等样式

简单介绍 xlwings 对颜色的调整:

XlsxWriter 包含大量功能,可以创建工作表后对工作表进行高定自定义的样式修改:

openpyxl 样式主要包括字体、边框、段落对齐样式等

简单总结对 Excel 文件插入图片的情况:

xlwt 插入图片要求图片格式必须是 .bmp 格式才能插入成功

scale_y表示相对原图宽高的比例,图片可放大缩小

下面是用xlwings 插入图片的代码,可以指定位置

第一个参数是插入的起始单元格,第二个参数是图片文件的绝对路径

openpyxl也可以给Excel中插入指定图片并修改大小

以上就是根据不同 Python 模块,对常见的 Excel 操作进行对比的全部内容,最终结果汇总如下表所示

请注意,本文目的并不是要评出一个最好的库,仅是从不同角度对不同库进行对比,希望能够让大家了解各个库所擅长的工作。比如pandas虽然处理方便,但是不能添加图片修改样式,openpyxl虽然各种操作都支持,但是速度又相对慢一点等。

只有充分了解不同工具的特点,才能够在不同的场景下灵活运用不同的方法来高效解决问题!如果喜欢本文的话,希望你可以给本文点个赞!

人生苦短,我用Python。分享Python相关的技术文章、工具资源、精选课程、视频教程、热点资讯、学习资料等。每天自动更新和推送。

重磅!Python交流已成立

公众号运营至今,离不开小伙伴们的支持。
为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。
群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!)
}

本段说说使用csv库常见的问题:

  1. csv.DictWriter():该函数返回的结果遍历一次之后,再次遍历返回的结果是空列表。
  2. csv.reader():返回的结果是结构体,需要for循环才能调用,不能像list那样直接选取特定单元格。
  3. 通过列名来查找指定列的操作麻烦。
  1. 每次循环遍历完,重新使用csv.DictWriter()函数读取文件。
  1. 将csv转换成二维列表形式
  2. 支持通过列名查找特定列。
  3. 相比csv库,事半功倍。

2.查找指定列及指定单元格

2.1指定列:通过索引指定列名为hour的列

#指定列名为hour的列 #在hour列中找到时间为23的行

csv文件中:1002A站点0时的AQI为空白值,返回的结果为NAN

  1. 通过运算操作判断:任何数字乘上0都是0

2.推荐使用nan*0之后仍是nan,而不是0

3.加了参数后,输出的所有数据类型变为str,nan变为空值,len(result)=0。

}

本文的目的,是向您展示如何使用 来执行一些常见的Excel任务。有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其他地方找到的复杂功能同等重要。作为额外的福利,我将会进行一些模糊字符串匹配,以此来展示一些小花样,以及展示pandas是如何利用完整的Python模块系统去做一些在Python中是简单,但在Excel中却很复杂的事情的。

有道理吧?让我们开始吧。

我要介绍的第一项任务是把某几列相加然后添加一个总和栏。

首先我们将 导入到pandas数据框架中。


  

我们想要添加一个总和栏来显示Jan、Feb和Mar三个月的销售总额。

在Excel和pandas中这都是简单直接的。对于Excel,我在J列中添加了公式sum(G2:I2)。在Excel中看上去是这样的:

下面,我们是这样在pandas中操作的:


  

接下来,让我们对各列计算一些汇总信息以及其他值。如下Excel表所示,我们要做这些工作:

如你所见,我们在表示月份的列的第17行添加了SUM(G2:G16),来取得每月的总和。
进行在pandas中进行列级别的分析很简单。下面是一些例子:

 

现在我们要把每月的总和相加得到它们的和。这里pandas和Excel有点不同。在Excel的单元格里把每个月的总和相加很简单。由于pandas需要维护整个DataFrame的完整性,所以需要一些额外的步骤。

首先,建立所有列的总和栏

 

这很符合直觉,不过如果你希望将总和值显示为表格中的单独一行,你还需要做一些微调。

我们需要把数据进行变换,把这一系列数字转换为DataFrame,这样才能更加容易的把它合并进已经存在的数据中。T 函数可以让我们把按行排列的数据变换为按列排列。


  

在计算总和之前我们要做的最后一件事情是添加丢失的列。我们使用reindex来帮助我们完成。技巧是添加全部的列然后让pandas去添加所有缺失的数据。


  

现在我们已经有了一个格式良好的DataFrame,我们可以使用append来把它加入到已有的内容中。


  

另外一个例子,让我们尝试给数据集添加状态的缩写。

对于Excel,最简单的方式是添加一个新的列,对州名使用vlookup函数并填充缩写栏。

我进行了这样的操作,下面是其结果的截图:

你可以注意到,在进行了vlookup后,有一些数值并没有被正确的取得。这是因为我们拼错了一些州的名字。在Excel中处理这一问题是一个巨大的挑战(对于大型数据集而言)

幸运的是,使用pandas我们可以利用强大的python生态系统。考虑如何解决这类麻烦的数据问题,我考虑进行一些模糊文本匹配来决定正确的值。

幸运的是其他人已经做了很多这方面的工作。库包含一些非常有用的函数来解决这类问题。首先要确保你安装了他。

我们需要的另外一段代码是州名与其缩写的映射表。而不是亲自去输入它们,谷歌一下你就能找到这段代码。

首先导入合适的fuzzywuzzy函数并且定义我们的州名映射表。


  

这里有些介绍模糊文本匹配函数如何工作的例子。

 
 

现在我知道它是如何工作的了,我们创建自己的函数来接受州名这一列的数据然后把他转换为一个有效的缩写。这里我们使用score_cutoff的值为80。你可以做一些调整,看看哪个值对你的数据来说比较好。你会注意到,返回值要么是一个有效的缩写,要么是一个np.nan 所以域中会有一些有效的值。


  

把这列添加到我们想要填充的单元格,然后用NaN填充它


  

我们使用apply 来把缩写添加到合适的列中。


  

我觉的这很酷。我们已经开发出了一个非常简单的流程来智能的清理数据。显然,当你只有15行左右数据的时候这没什么了不起的。但是如果是15000行呢?在Excel中你就必须进行一些人工清理了。

在本文的最后一节中,让我们按州来做一些分类汇总(subtotal)。


  

然后,我们想要通过对data frame中所有的值使用 applymap 来把数据单位格式化为货币。

 

格式化看上去进行的很顺利,现在我们可以像之前那样获取总和了。


  

  

把值变换为列然后进行格式化。


  

  

你可以注意到总和行的索引号是‘0'。我们想要使用rename 来重命名它。


  

到目前为止,大部分人都已经知道使用pandas可以对数据做很多复杂的操作——就如同Excel一样。因为我一直在学习pandas,但我发现我还是会尝试记忆我是如何在Excel中完成这些操作的而不是在pandas中。我意识到把它俩作对比似乎不是很公平——它们是完全不同的工具。但是,我希望能接触到哪些了解Excel并且想要学习一些可以满足分析他们数据需求的其他替代工具的那些人。我希望这些例子可以帮助到其他人,让他们有信心认为他们可以使用pandas来替换他们零碎复杂的Excel,进行数据操作。

}

我要回帖

更多关于 pandas读取excel前几行 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信