.本节书摘来自华章出版社《机器学习系统设计:Python语言实现》一书中的第2章,第2.6节,作者 [美] 戴维·朱利安(David Julian),更多章节内容可以访问云栖社区“华章计算机”公众号查看
2.6 Pandas
Pandas库建立于NumPy之上,并引入了一些十分有用的数据结构和功能,用于读取和处理数据。Pandas对于通常的数据处理(data munging)来说是极为出色的工具。诸如处理缺失数据、操作阵形和大小、在数据格式和结构间进行转换,以及从不同数据源导入数据等,使用Pandas对这些常见任务进行处理都很容易。
Pandas引入的主要数据结构有:
Series
DataFrame
Panel
DataFrame大概是使用最为广泛的。它是一个二维结构,实际上是由NumPy的数组、列表、字典,或是series等创建的表。我们还可以通过读取文件来创建DataFrame。
感受Pandas最好的方式大概就是完成一个典型的用例。假设我们有一个任务,研究每日最高温度如何随着时间变化。在这个例子中,我们将使用塔斯马尼亚的霍巴特气象站的天气观测历史数据。我们需要从地址http://davejulian.net/mlbook/data下载ZIP文件,并将其解压到Python工作目录中名为data的文件夹中。
首先,我们需要从中创建一个DataFrame:
检查一下数据中最开始的几行:
我们可以看到,每行都有相同的“product code”和“station number”,而这些信息是多余的。同时,累计最高温度的天数(“Days of accumulation of maximum temperature”)与我们的目标无关,因此也将其删除:
为了让数据读起来简单点,我们将列标记缩短:
我们只关心优质数据,因此只需要列出“quality”值为Y的记录:
我们可以从数据中得到统计汇总:
如果引入matplotlib.pyplot包,我们可以用这些数据绘图:
请注意PyPlot正确地绘制了日期轴的格式,对于缺少的那段时间的数据,PyPlot通过连接其两边的已知点进行了处理。我们可以通过如下方式将DataFrame转换为NumPy的数组:
如果DataFrame中包含多种数据类型,那么该函数会将这些类型都转换为它们的最小公分母类型,也就是说,会选择能够容纳所有值的那个类型。例如,如果DataFrame由float 16和float 32混合组成,则所有值都会转换为float 32。
Pandas的DataFrame非常适用于浏览和操作简单的文本和数值数据。然而,对于更为复杂的数值处理,例如计算点积,或者对线性系统求解等,Pandas可能就不适用了。对于数值应用,我们一般使用NumPy类。