快乐学Python,如何使用Python处理文件(csv、Excel、html)数据?

在前面的文章中,我们了解了Python爬虫的一些内容。截止到现在,我们已经可以将需要的数据通过爬虫获取,并保存到CSV文件中。

在有了数据集后,接下来我们就开始了解如何将数据集的内容加载到Python中。虽然在之前也有了解简单的读取csv数据。但是存在两个问题:

  • 只能读取csv文件,但数据分析的数据除了可能来自 csv,也可能来自 Excel,甚至可以来自 html 的表格。
  • 读取到的结果一般是字典列表,并不利于分析,比如虽然我们每个字典就代表一行记录,但一旦我们想拿某一列的数据的时候就会非常复杂。

Python 作为数据分析领域的头号种子选手,自然不会只有 csv 模块这样的初级工具。这个部分我们将会学习表格类型的大数据处理神器:pandas.

pandas 不仅可以从多种不同的文件格式读取数据,还有各种各样的数据处理的功能。可以说学好了pandas,就基本已经算踏上了数据分析之路。话不多说,我们这就开始 pandas 之旅。

1、安装pandas

打开开始菜单 → Anaconda3 → Anaconda Prompt, 并输入 conda install pandas 回车执行, 如下图所示。


输入y完成安装即可。

2、使用pandas读取csv文件

首先我们来了解如何使用 pandas 来读取 csv 文件。

pandas 模块提供了一个 read_ csv 的方法,可以直接读取 csv 文件,并返回一个 DataFrame 对象。DataFrame 对象是 pandas 模块的核心,pandas 的所有表格都是通过 DataFrame 对象来存储的,并且 DataFrame 还提供了非常多查看数据、修改数据的方法。我们在之后的文章中会逐渐了解 DataFrame 的用法。

现在只需要知道,pandas 可以直接从一个 csv 文件中,将数据读到 Python 中,并且以DataFrame 对象的形式返回,我们拿到这个对象就可以查看其中的数据就可以了。

(1)实战 read_ csv

新建 Cell, 输入如下的代码。

# 使用 pandas 模块的 read_ csv 函数,读取 csn 文件。并将结果存在 df_rating 变量中df_rating = pd.read_ csv("tv_rating. csv")# 打印 df_rating 变量print("df_rating:")print(df_rating)# 打印 df_rating 变量的类型print("df_rating type:")print(type(df_rating))

运行之后输出如下所示。

从上面的输出中可以看到,df_rating 变量中包含了我们 csv 文件中的所有数据,并且还有形状的描述:9720 行 x 3列,这个也和我们下载的数据一致。通过打印 df_rating 的类型,可以看到 df_rating 的类型就是我们上文提到的 DataFrame。

(2)更好看的表格

DataFrame 很强大,它甚至针对 notebook 有专门优化。回到 DataFrame, 当我们不是直接用 print 打印它,而是把 DataFrame 变量放在 Cell 的末尾时, notebook 就会用一种更好看的格式来打印它。我们马上来试一下,直接新建一个 Cell,输入如下的代码运行。

df_rating

输出如下:


可以看到这一次的格式可比上一次好看多了,更像一个表格,对应的也更加整齐。

3、使用 pandas 读取 excel 文件

在 Python 还没有兴起之前,大量的数据分析是通过 Excel 完成的。这也造就了在很多传统行业中,还有大量的数据是保存在 Excel 中,所以读取 Excel 也是进行分析也是 Python 数据分析领域的常见任务。

Excel 的 .xls/.xlsx 文件格式是微软针对表格开发的,只能使用 Excel 来打开,比如用记事本打开往往会看到有乱码。那 Python 是怎么读取 Excel 里面的内容呢?那自然是我们本模块的 Super Star:pandas。

类似 csv 的读取,pandas 也提供了 read_excel 函数来实现读取 excel 文件中的内容,但是使用方法比 read_ csv 稍微复杂一些。

(1)数据准备

打开 Excel ,将第一个表格(sheet)的名字改为:基本信息,并添加下述内容


再新建一个sheet,表格名字改为:绩效,并添加如下内容

(2)读取数据

数据准备完毕了,现在我们来读取我们刚才创建的表格。形式类似刚才的 read_ csv。

代码如下:

# 使用 read_excel 函数,读取 info.xlsx 的内容并存储在 df_info 变量中df_excel = pd.read_excel("info.xlsx")# 不用 print,直接将 df_info 放在最后一行,让notebook用表格形式打印df_excel

输出如下:


可以看到,Excel 中的数据被成功的打印了出来,和 read_ csv 一样,read_excel 返回的也是一个 DataFrame。

不过内容虽然打印出来了,但是只打印出了第一个表格,也就是“基本信息”这个表格,我们后面添加的“绩效”表格并没有打印出来。这是 pandas 的机制导致的,read_excel 默认读取 excel 文件中的一个表格。

一个 Excel 中包含多个表格还是很常见的,pandas 不可能坐视不理,如何读取更多的表格呢?

(3)读取不同的表格

read_excel 比 read_ csv 复杂的地方就在于,read_excel 支持非常多的参数。比如要实现读取后面的表格,我们只需要给 read_excel 函数的 sheet_name 参数赋值即可。

代码如下:

df_excel = pd.read_excel("info.xlsx", sheet_name="绩效")df_excel

输出如下:


可以看到,这次输出的就是我们增加的“绩效”表格中的内容。

简单来说,我们可以在 read_excel 中,通过给 sheet_name 赋值来决定要加载文件哪个表格,如果不指定,pandas 则默认加载第一个表格。

(4)选择性读取

excel 文件的数据很多,全部加载到 Python 中可能会卡,而且有时候我们只对其中某几列感兴趣,全部加载显示也不容易看。read_excel 提供了 usecols 参数,可以指定要加载哪几列。

举个例子,刚才的“绩效”表格,我们对上期考核结果不感兴趣,只想加载姓名和绩效考核这两列的内容。那我们可以这么做,新建 Cell,输入如下代码。

df_excel = pd.read_excel("info.xlsx", sheet_name="绩效", usecols="A,B")df_excel

输出如下:


在上面的代码里,我们通过字母 A 和 B 指定了加载第一列和第二列。字母和列的对应关系其实就是 Excel 里面的对应关系。(具体大家可以看看excel文件中名称和绩效考核字段上面的字母)

4、使用 pandas 读取 html 文件

有的时候数据并不是整理好的 csv 表格或者 Excel 表格,而是以网页中的表格的形式存在,最常见的就是各类股票财经网站,比如像同花顺的股票涨跌幅数据中心或者像招行银行的外汇行情页面:

如果我们希望将这些网页中的表格“导入”到 Python 进行处理,那自然也是可以的。根据我们上一个部分的爬虫技术,我们只需要将这个页面的 html 下载下来,然后用 BeautifulSoup 分析表格的标签结构,然后把内容一行一行的提取出来,再一步一步拆分成列。

做是可以做,但只听这个流程,只看这个复杂的页面,都让人觉得工作量很大。而对于提取网页中的表格,其实存在一个非常简单的方法:使用强大的 pandas。

和 read_ csv、read_excel 类似,pandas 也提供了一个 read_html 的方法,来智能的提取网页中的所有表格,并以 DataFrame 列表的形式返回,一个表格对应一个 DataFrame。看到这里,是否有感触到 pandas 的强大之处?

下面我们来通过Python的read_html方法来加载招商银行网页中的数据。

(1)准备网页

首先要做的第一件事,就是要拿到网页的内容。在前面的文章中,我们已经写过了一个拿网页内容的函数。,直接复制过来,代码如下:

import urllib3def download_content(url):# 创建一个 PoolManager 对象,命名为 httphttp = urllib3.PoolManager()# 调用 http 对象的 request 方法,第一个参数传一个字符串 "GET"# 第二个参数则是要下载的网址,也就是我们的 url 变量# request 方法会返回一个 HTTPResponse 类的对象,我们命名为 responseresponse = http.request("GET", url)# 获取 response 对象的 data 属性,存储在变量 response_data 中response_data = response.data# 调用 response_data 对象的 decode 方法,获得网页的内容,存储在 html_content # 变量中html_content = response_data.decode()return html_contenthtml_content = download_content("http://fx.cmbchina.com/Hq/")

执行上述代码之后,网页内容就已经存储在 html_content 变量中。

(2)读取数据

在准备好了网页的内容之后,我们就可以调用 read_html 函数来获取表格了。

# 调用 read_html 函数,传入网页的内容,并将结果存储在 cmb_table_list 中# read_html 函数返回的是一个 DataFrame 的listcmb_table_list = pd.read_html(html_content)# 打印 list 的长度,看看抽取出了几个表格print(len(cmb_table_list))

执行代码,输出结果为 2。这说明找到了两个表格。现在我们来从列表中找出我们要的表格,首先查看第一个 DataFrame。

新建 Cell, 输入以下代码并运行。

# 直接写变量,利用 notebook 的特性打印表格cmb_table_list[0]

执行后,输出如下:


很明显,这不是我们要的表格,现在我们看第二个。

新建 Cell,输入如下的代码。

cmb_table_list[1]

执行之后,输出如下所示。


很明显,这个就是我们要的表格了。可以看到我们在招行官网上看到的汇率表格已经完整的被加载到了 pandas 的 DataFrame 中,并且能够以表格的形式打印出来。是不是感觉到非常神奇?

如果我们用 BeautifulSoup 来解析这个网页然后提取出表格的内容,恐怕代码都要写大几十行,而 pandas 却一个函数搞定了。

更多内容欢迎关注微信公众号:服务端技术精选

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一区优化直接写:KOA-CNN-BiLSTM-Attention开普勒优化卷积、长短期记忆网络融合注意力机制的多变量回归预测程序!

适用平台:Matlab 2023版及以上 KOA开普勒优化算法,于2023年5月发表在SCI、中科院1区Top顶级期刊《Knowledge-Based Systems》上。 该算法提出时间很短,目前还没有套用这个算法的文献。 同样的,我们利用该新鲜出炉的算法对我们的…

一文读懂大语言模型

随着人工智能技术的飞速发展,自然语言处理(NLP)成为了热门的研究领域之一。在这一领域中,预训练大语言模型(Pre-trained Large Language Models)凭借其强大的语言理解和生成能力,逐渐成为了研究…

ChatGPT在国自然基金撰写中的妙用;从申请人的角度,带你一次入门;从评审专家的角度,带您逐一突破

目录 专题一 国自然项目介绍 专题二 基金的撰写技巧(从申请人的角度,带你一次入门) 专题三 基金的专项技巧(从评审专家的角度,带您逐一突破) 专题四 ChatGPT在基金撰写中的妙用 更多应用 您的基金撰写…

HarmonyOS 通过Web组件嵌套网络应用

我们今天来说说 在程序中嵌套一个网址地址 HarmonyOS中是通过一个简单的WEB组件来实现 网络应用就是相当于网址地址 通过链接将应用嵌入到手机当中 WEB组件需要两个参数 一个是 src 地址 要嵌套的网址 另一个是 控制器 我们可以先编写代码如下 import webview from "o…

【代码随想录算法训练营第二十四天|回溯算法的理论基础、77. 组合】

代码随想录算法训练营第二十四天|回溯算法的理论基础、77. 组合 回溯算法的理论基础77. 组合 回溯算法的理论基础 这里我觉得《代码随想录》和y总的课都比较好了 《代码随想录》 : https://programmercarl.com/0077.%E7%BB%84%E5%90%88%E4%BC%98%E5%8C%96.html#%E5…

手握中下牌型如何赢掼蛋?

中下牌型的特点:牌不是很好,炸弹少,但是牌型种类较多,并且有上手牌,适合配合对方,发动进攻。手握此类牌型,可采取协同进攻、全面防御、顺势突围三种方式来扭转双下局面。 一、协同进攻 此时应当…

【松叶漫话】程序员裁员潮:如何面对技术变革下的职业危机

一对来自中国的工程师夫妻在美身亡,疑因谷歌裁员致悲剧发生。在技术变革下,裁员对于程序员的影响到底有多大?一起来聊聊吧~ 方向一:技术变革 当前的技术变革涵盖了多个方面,其中一些主要趋势包括人工智能(…

数据结构--数组和广义表

1. 数组的定义 略 2. 数组的顺序表示 由于数组定义后,数组的维度和每维的长度就不再改变,其结构是固定的,因此一般采用顺序存储结构。 3. 特殊矩阵的压缩矩阵 4. 广义表的定义和抽象操作 广义表一些操作可以看数据结构--广义表_空广义表的…

Unity 工厂方法模式(实例详解)

文章目录 在Unity中,工厂方法模式是一种创建对象的常用设计模式,它提供了一个接口用于创建对象,而具体的产品类是由子类决定的。这样可以将对象的创建过程与使用过程解耦,使得代码更加灵活和可扩展。 工厂模式的主要优点如下&…

二、arcgis 点shp数据处理

在工作中,很多时候客户会提供点坐标,那么要想把点坐标生成shp文件,有两种方法(坐标系CGCS2000): 1.当只有个位数的点坐标时,可以直接在arcgisMap中添加,具体步骤如下: …

Qt 开发环境配置 vs和Qt creator

Qt 开发环境配置 vs和Qt creator 1、安装的软件 1、vs_Enterprise.exe 2、Qt creator (最好是最新的版本,低版本不支持vs2019) 下载地址:https://gofile-3535697530.cn1.quickconnect.cn/sharing/zMCh5ENgZ 密码:qt_dev 2、Qt Creator配置 1、打开…

htmx,它到底是框架还是库?

在最近的前端开发技术的探讨中,htmx经常成为热议的话题。一些人批评它,认为尽管htmx批评现代前端框架过于复杂,但它自己却似乎也是一个复杂的框架。这种看法值得我们深入思考。因为当你将任何第三方代码引入你的项目时,无论是htmx…