Python数据挖掘实战(微课版)
上QQ阅读APP看书,第一时间看更新

2.2.1 Pandas的数据结构

Pandas提供了Series和DataFrame两种重要的数据结构。Series类似于NumPy中的一维数组。除了可以调用NumPy一维数组的所有函数与方法外,Series还支持通过索引对数据进行选择和操作。DataFrame类似于NumPy的二维数组,支持调用NumPy二维数组的所有函数和功能。

使用Series和DataFrame时,需要先引用Pandas模块,本书默认使用下面的引用方式:


import pandas as pd

在引用Pandas以后,直接使用pd.Series和pd.DataFrame进行数据处理。

1.Series

Series由一组数据(可以是不同数据类型)和与之对应的索引值组成。创建一个Series对象时,可以通过向pd.Series传递一个Python列表、字典或者NumPy一维数组来实现。对于名字为s的Series对象,可以分别使用s.index和s.values查看其索引和值。

代码2-13展示了3个创建Series对象的例子。

代码2-13 Series对象的创建方法


import numpy as np
import pandas as pd
#使用列表创建Series对象,并指定索引
s1 = pd.Series([0, 1, 2, np.nan], index = ['a', 'b', 'c', 'd'])
print("使用列表创建的Series对象s1:\n", s1)
dic = {'张三': 97, '李四': 68, '王五': 88}
s2 = pd.Series(dic)              #使用字典创建Series对象
print("使用字典创建的Series对象s2:\n", s2)
arr = np.arange(4)               #使用NumPy数组创建Series对象
s3 = pd.Series(arr)
print("使用NumPy数组创建的Series对象s3:\n", s3)

上述代码的输出结果为(第1列均为索引)


使用列表创建的Series对象s1:
a    0.0
b    1.0
c    2.0
d    NaN
dtype: float64
使用字典创建的Series对象s2:
张三    97
李四    68
王五    88
dtype: int64
使用NumPy数组创建的Serie对象s3:
0    0
1    1
2    2
3    3
dtype: int32

在代码中,Series对象s1通过传入一个列表作为参数进行创建,并设置了每个元素对应的索引为['a','b','c','d']。对象s2通过传入一个字典作为参数进行创建,其中,字典的键被识别为Series对象的索引,字典的值作为数据。对象s3通过传入一个NumPy一维数组作为参数进行创建,由于没有指定索引,Pandas为其设置了0~3的整数作为自动索引。

2.DataFrame

DataFrame是一个表格型数据结构,类似于Excel的二维表格。一个DataFrame对象由多个列组成,每列的数据类型可以不同(数值、文本等)。DataFrame对象既有行索引,也有列索引,因此可以通过指定行、列索引精准地操作DataFrame对象中的值。

创建DataFrame对象的典型方法是向pd.DataFrame()方法传入二维列表、二维数组或者字典。代码2-14展示了创建DataFrame对象的几种常见方法。

代码2-14 DataFrame对象的创建方法


import numpy as np
import pandas as pd
#使用二维列表创建
df1 = pd.DataFrame([['a', 1, 2], ['b', 3, 4], ['c', 7, 8]], columns = ['x', 'y', 'z'])
print("使用二维列表创建DataFrame对象:\n", df1)
#使用NumPy二维数组创建
df2 = pd.DataFrame(np.zeros((3, 3)), columns = ['x', 'y', 'z'])
print("使用NumPy二维数组创建DataFrame对象:\n", df2)
#使用字典创建
dic = { '语文': [98, 88, 78],
          '数学': [89, 72, 93],
          '英语': [84, 85, 77]}
df3 = pd.DataFrame(dic, index = ['张三', '李四', '王五'])
print("使用字典创建DataFrame对象:\n", df3)

上述代码的输出结果为


使用二维列表创建DataFrame对象:
   x  y  z
0  a  1  2
1  b  3  4
2  c  7  8
使用NumPy二维数组创建DataFrame对象:
     x    y     z
0  0.0  0.0  0.0
1  0.0  0.0  0.0
2  0.0  0.0  0.0
使用字典创建DataFrame对象:
      语文 数学 英语
张三  98   89   84
李四  88   72   85
王五  78   93   77

在此代码中,DataFrame对象df1使用Python的二维列表来创建,并指定了其列索引为['x','y','z']。由于未提供行索引,Pandas为df1创建了一个从0到N-1(N表示传入数据的行数)的整数序列作为自动行索引。对象df2通过传入一个3×3的NumPy二维数组作为参数创建。对象df3使用了包含“键—值”对的字典作为参数进行创建,其中,字典的“键”被作为对象的列索引,对应的“值”被作为对象的列的内容。也可以通过index参数为df3对象设置行索引['张三','李四','王五']。