从文件读取数据

从文件读取数据

作者: 莫烦 编辑: 莫烦 发布于: 2021-12-05

有很多 Pandas 的教学,一开始一般都是开始教 Pandas 的数据结构或者运算方法。 但是我觉得,当你想要使用 Pandas 的时候,更多是因为你手头有 Excel 数据或者比较格式化的数据, 需要处理分析和表达这些数据。为了解决你这种当务之急,我觉得先解决读取数据这回事。

本节内容涉及到的功能:

你想不到的情况

开头我就举例了你最常会遇到的情况,因为 Windows 的大量普及,能有多少人没用过 Excel 呢,所以如果你在办公或者上学, 数据大多还是用 Excel 来保存的。但是当你深入程序员的领域,你就会发现原来数据还可以更多元化,多样化。

mofan html

比如你看到的网页,也是标准化格式的数据,如果找到中间的规律,整理出来,也可以列在表格中。哈哈,爬虫就是这么干的。 在比如,有很多文件都是纯文本的方式记录的,只要是有格式的 txt 文件,也能被标准化的读取出来。甚至你可能见过的 csv 文件,以为只能用 Excel 打开, 但是它也是纯文本文件,你用一个 txt 编辑器也能打开编辑它。所以数据是多样的,而 Pandas 为每种数据类型都定义的功能, 让我们更加轻松地管理这些数据。

read save

在开始之前,请你先帮我点击一下下面的运行按钮,运行这段代码,下载这节内容中所需要的数据到你的浏览器环境中。 然后你可以看到它存储在浏览器虚拟目录中的样子。这些数据都是我们后面要使用到的样例数据。

Excel文件

现在就让我们看看你最可能遇见的 Excel 文件是怎么用 Pandas 读取出来。你可以在这个链接下载 看看等会要使用读取的文件。下载好之后,用 Excel 打开是这样:

excel data

点击上面的 RUN 运行按钮,浏览器就会自动帮你下载这节所需要的内容,用 Python 的 os os.listdir() 功能, 你就能看到我们下载的文件存放在哪里了。好的,这一步假设的就是我们电脑里有一份 xlsx 的 Excel 文件,现在我们要来用 Pandas 打开它。 你只需要使用使用 pd.read_excel() 就能读出来了。

注意,当你在自己电脑,本地运行 Python 时,pd.read_excel() 功能有可能会报错,说你可能缺失这几个库 openpyxl, xlrd, lzma 当中的某些库。 解决的办法很简单,就是用 pip 来安装它们就好。

pip install openpyxl xlrd lzma

另外,我在 pd.read_excel() 当中使用了 index_col=0 这个参数,你先看看如果不使用这个,会显示什么。

你看,前面还多了一列 Unnammed:0,使用 index_col=0 就是告诉 Pandas,让它使用第一个 column(学号)的数据当做 row 索引。 后面还有很多读取的功能里也有一样的参数。

好,我们既然可以读取 Excel 文件,那么稍稍修改,再保存起来应该也不成问题。

运行完上面这句保存的指令,我们下面再打开这份修改版 Excel 吧。看看这份文件到底有没有被修改。

其实在读取和保存 Excel 文件的时候,还有很多额外的参数可供选择,因为太多了,我们这里就先讲最常用的,如果你要深入研究, 可以到他们的官网来看官方文档

csv或txt等纯文本文件

提到纯文本文件,你会想到哪些?txt,csv,log 等这些都可以是纯文本文件,不过值得注意的是,对于 Pandas,它只对结构化的纯文本文件感兴趣。如果在你的纯文本文件中, 不是用一些标准的分隔符来分割数据,那么 Pandas 也拿它无能为力,是解析不出来的。

先看看这个体检数据.csv文件,你可以用 Excel 或者是 txt 编辑器打开它,我建议你还是用纯文本(txt)编辑器打开, 这样你就能观看到它最原始的样貌了。

csv

上图就是我用纯文本打开后的样子,可见,它就是用逗号隔开的一些数据而已。你也能用 Python 的 open 打开纯文本。

在机器学习或者很多场景下的数据分析中,数据也都是这样保存的。 因为这样保存出来的数据,所占空间比 xlsx 这种 Excel 文件要小很多。而且也不失可读性。用 Pandas 打开也很简单,直接调用 pd.read_csv() 就好了。

还有的时候,你不能保证别人给你的数据,是不是一份标准格式的数据,比如别人不喜欢用 , 来分隔数据点, 而是喜欢用什么乱七八糟的 = 来分隔。这时,Pandas 帮你考虑到了这种问题, 你可以挑选要用哪个字符来识别这些分隔。

提到 csv,你可能还会想用 Excel 打开看看,但是提到 txt,一般你也不会想用 Excel 打开了吧。用 Pandas 打开一个 txt 文件和打开一个 csv 文件,、 其实本质上是一样的,都是打开一个纯文本文件。所以下面我再打开一下 txt。

能打开,我们就能保存,保存方法同样很简单,只需要 df.to_csv() 就好了,甚至,你还能保存到 Excel 文件,在 Pandas 中它们是可以互相转换的。 同理用 read_excel() 打开的,也能存成 to_csv()

好了,做数据分析和机器学习,会用上面的方法来读 Excel 或者是纯文本,我们就已经解决了大部分的需求了。下面我来介绍几个我觉得 Pandas 的额外几个有趣的读取方式。

其他有趣的

下面这几个,因为我使用的这个交互式 Python 引擎有一些局限性,你没有办法在浏览器中运行,但是如果你哪天打开本地的 Python 环境,也是可以试试的。

从剪切板里面读取数据,这个很有意思,使用场景并不多,但是指不定哪天你要用 Python 写 APP 的时候,就能用到这个,不是有很多 APP 会识别你的剪切板, 方便你直接复制数据吗。这个功能说不定就能派上用场。

注:这个环节的所有 RUN 按钮点击后,都会报错,因为浏览器中的 Python 不支持这些功能。

另外一个是从网页中获取表格型数据,就像下面这个表格。我们也能用 Pandas 调取解析网页当中的表格数据。

学号 姓名 身高 体重 肺活量
1 小明 168 60 3200
2 小黄 187 80 3800
3 小花 170 70 3400

注:这个环节的所有 RUN 按钮点击后,都会报错,因为浏览器中的 Python 不支持这些功能。

还有一些功能,比如让 Pandas 读数据库,读 Json 等,你都可能在后期自己开发的时候偶尔用到。只要用到的时候,查查 Pandas 官方文档 还是很有帮助的。

总结

大千世界,数据也是多样的,Pandas 量身为你定制了很多读取数据的方法。从做数据分析和机器学习最常用的 Excel、csv、txt 数据等,到 html,剪切板等有趣的数据类型, 一个 Pandas 都可以帮你搞定。了解完读存数据,下一节,我们就来认真了解,数据在 Pandas 中到底是一个什么样的东西。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 【支持莫烦】 能让我感到认同,我也更有理由坚持下去。

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat