购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 数据分析处理库Pandas

3.3.1 Pandas数据结构Series

Series是一种一维数据结构,每个元素都带有一个索引,与一维数组的含义相似,其中索引可以为数字或字符串,如图3-1所示。

图3-1

Series对象包含两个主要的属性:index和values,分别为上例中的左右两列。因为传给构造器的是一个列表,所以index的值是从0起递增的整数,如果传入的是一个类字典的键-值对结构,就会生成index-value对应的Series;或者在初始化的时候以关键字参数显式指定一个index对象。

示例代码如下,Series类似于一维数组,但Series最大的特点就是可以使用标签索引。ndarray也有索引,但它是位置索引,Series的标签索引使用起来更加方便。

运行结果如图3-2所示。

图3-2

注意: Series的index和values的元素之间虽然存在对应关系,但这与字典的映射不同。index和values实际仍为互相独立的ndarray数组,因此Series对象的性能完全没问题。

3.3.2 Pandas数据结构DataFrame

Dataframe是一种二维数据结构,数据以表格形式(与Excel类似)存储,有对应的行和列,如图3-3所示。它的每列可以是不同的值类型(不像ndarray只能有一个dtype)。基本上可以把DataFrame看成是共享同一个index的Series的集合。

图3-3

DataFrame的构造方法与Series类似,只不过可以同时接受多条一维数据源,每一条都会成为单独的一列,演示代码如下。DataFrame创建方法比较丰富,可以通过字典、列表、ndarrays、Series对象创建而来。

运行结果如图3-4所示。

图3-4

如下面的代码所示,Pandas可以使用loc属性返回指定行的数据,如果没有设置索引,第一行索引为0,第二行索引为1,以此类推。它也可以返回多行数据,使用[[ ... ]]格式,...为各行的索引,以逗号隔开。

运行结果如图3-5所示。

图3-5

另外,也可以只获取dataframe中的几列,比如当处理数据的时候series较多,我们可以只关注其中一些特定的列,代码如下,假设只关注apple和banana数据列。

运行结果如图3-6所示。

图3-6

3.3.3 Pandas处理CSV文件

CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号)文件以纯文本形式存储表格数据(数字和文本)。CSV是一种通用的、相对简单的文件格式,被用户、商业和科学领域广泛应用。Pandas可以很方便地处理CSV文件。

Pandas在读取CSV文件时通过read_csv函数读取,读取CSV文件时指定的分隔符默认为逗号,代码如下。注意“CSV文件的分隔符”和“我们读取CSV文件时指定的分隔符”一定要一致。Pandas的head(n)方法用于读取前面的n行,如果不填参数n,则默认返回5行。tail(n)方法用于读取尾部的n行,如果不填参数n,则默认返回5行。

    import pandas as pd
    df = pd.read_csv('nba.csv',sep=',')
    print(df.head())
    print(df.tail())

运行结果如图3-7所示。

图3-7

Pandas的info()方法返回表格的一些基本信息,代码如下。在输出结果中,non-null为非空数据,可以看到这些信息总共458行,College字段的空值最多。

    import pandas as pd
    df = pd.read_csv('nba.csv')
    print(df.info())

运行结果如图3-8所示。

图3-8

我们也可以使用to_csv()方法将DataFrame存储为CSV文件,代码如下:

运行结果如图3-9所示。

图3-9

还要注意Pandas的to_string()用于返回DataFrame类型的数据,如果不使用该函数,则直接print(df)输出结果为数据的前面5行和末尾5行,中间部分以…代替。

3.3.4 Pandas数据清洗

数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、数据错误或数据重复的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。

这里使用的测试数据是clean-data.csv,如图3-10所示。这个表包含4种空数据:n/a、NA、--、na。

图3-10

我们可以通过isnull()判断各个单元格是否为空,代码如下。这个例子中,我们看到Pandas把n/a和NA当作空数据,na不是空数据,不符合我们的要求,可以指定空数据类型。

运行结果如下:

在下面的代码中,dropna()方法是删除包含空数据的行。默认情况下,dropna()方法返回一个新的DataFrame,不会修改源数据(如果你要修改源数据DataFrame,可以使用inplace = True参数)。我们可以使用fillna()方法来替换一些空字段,也可以指定某一列来替换数据。

运行结果如图3-11所示。

图3-11

通常替换空单元格的方法是计算列的均值、中位数值或众数。Pandas使用mean()、median()和mode()方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)。下面的代码使用mean()方法计算列的均值并替换空单元格。

运行结果如图3-12所示。

图3-12

数据格式错误的单元格会使数据分析变得困难,数据错误也是很常见的情况,我们可以对错误的数据进行替换或移除。Pandas清洗错误数据代码如下,这里格式化日期,替换错误年龄的数据。

运行结果如图3-13所示。

图3-13

如果要清洗重复的数据,可以使用duplicated()和drop_duplicates()方法。如果对应的数据是重复的,duplicated()会返回True,否则返回False。删除重复数据可以直接使用drop_duplicates()方法,代码如下:

运行结果如图3-14所示。

图3-14 KcW9Duh49XR0iVkd3vkslDcxfS0Mu6tfn2WRSq43vW45wJ4ky3tw72swx9klfwxd

点击中间区域
呼出菜单
上一章
目录
下一章
×