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对象设置行索引['张三','李四','王五']。