第3章 NumPy数据处理基石 Excel中的数组非常有用,不但能灵活地处理数据,更重要的是能提高程序的运算速度,我们也可以把NumPy理解为Excel中的数组。本章主要讲解NumPy数组的创建与转换、数组的预处理,以及数组维度的转换。最后讲解与数组有关的Series数据与DataFrame表格的创建。 3.1NumPy的定义 在第2章中获取DataFrame表格数据时,使用values属性返回数组类型的数据。DataFrame表格可以由Series数据构成,Series数据的本质是带标签的一维数组。这里说的数组是指NumPy库中的数组,因为Python本身并没有数组这种数据类型。 NumPy是一个运行速度非常快的数学库。支持大量维度数组与矩阵运算,而Pandas是基于NumPy的一种数据分析工具,因此要学好Pandas,就必须对NumPy有所了解。为了让NumPy表达起来更方便,将NumPy简写为np。 3.2NumPy数组的创建与转换 本节讲解普通数组、序列数组、随机小数数组和随机整数数组的创建,以及如何将整个DataFrame表格数据转换为数组,将DataFrame表格每列数据转换为数组。 3.2.1普通数组 创建普通数组可以使用np.array()函数,此函数的参数可以是任何序列类型的对象。例如将列表创建为普通数组的代码如下: #chapter3\3-2\3-2-1.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array(['张三','李四','王二']) #创建普通数组,并赋值给arr变量 print(arr) #打印arr数组 print(type(arr)) #打印arr数据类型 运行结果如下: ['张三' '李四' '王二'] print(arr)打印出的数组显示为['张三' '李四' '王二'],呈现方式与列表比较相似,列表的元素之间用逗号分隔,数组的元素之间用空格分隔。 print(type(arr))打印出的类型显示为,ndarray表明是普通数组类型,ndarray是具有相同类型和大小项目的(通常是固定大小的)多维容器。 既然普通数组是多维容器,接下来再创建一个多维数组,示例代码如下: #chapter3\3-2\3-2-2.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array((['张三','李四','王二'],[66,88,99])) #创建多维数组,并赋值给arr变量 print(arr) #打印arr数组 print(type(arr)) #打印arr数据类型 运行结果如下: [['张三' '李四' '王二'] ['66' '88' '99']] 以上代码创建的是二维数组,数组中的元素数据类型必须保持一致,在上面二维数组中,列表[66,88,99]中的元素是数字类型,但生成为数组后,数组中所有元素的数据类型转换为了字符串类型。 3.2.2序列数组 创建一个指定数字范围内的等差序列数组,可以使用np.arange()函数。它创建数组的方式非常灵活,参数可以是1个、2个或者3个,示例代码如下: #chapter3\3-2\3-2-3.ipynb import numpy as np #导入NumPy库,并命名为np arr1=np.arange(4) #np.arange()为1个参数 arr2=np.arange(7,12) #np.arange()为2个参数 arr3=np.arange(100,110,2) #np.arange()为3个参数 print(arr1) #打印arr1数组 print(arr2) #打印arr2数组 print(arr3) #打印arr3数组 运行结果如下: [0 1 2 3] [ 7 8 9 10 11] [100 102 104 106 108] 通过观察上面代码运行的结果,可以得出np.arange()函数的3种情况。 (1) 1个参数时,起始值默认为0,参数值为终止值,步长值默认为1。 (2) 2个参数时,第1个参数为起始值,第2个参数为终止值,步长值默认为1。 (3) 3个参数时,第1个参数为起始值,第2个参数为终止值,第3个参数为步长值。 3.2.3随机数组 在做数据测试时,经常需要生成一些随机数据。在NumPy中可使用np.random.rand()函数生成随机小数。下面分别创建单个随机小数,一维、二维和三维随机小数数组,示例代码如下: #chapter3\3-2\3-2-4.ipynb import numpy as np #导入NumPy库,并命名为np rnd=np.random.rand() #创建单个随机小数 arr1=np.random.rand(4) #创建一维随机小数数组 arr2=np.random.rand(2,4) #创建二维随机小数数组 arr3=np.random.rand(2,4,3) #创建三维随机小数数组 print(rnd) #打印单个随机小数 print(arr1) #打印arr1随机小数数组 print(arr2) #打印arr2随机小数数组 print(arr3) #打印arr3随机小数数组 运行结果如下: #打印的rnd随机小数如下所示 0.8988843798934052 #打印的arr1随机小数数组如下所示 [0.65870550.967483180.131193740.49618439] #打印的arr2随机小数数组如下所示 [[0.522127650.743144830.877419460.19396058] [0.590233710.077547370.53863830.91278296]] #打印的arr3随机小数数组如下所示 [[[0.144153370.526916130.84457373] [0.359250860.663581870.60983805] [0.47845530.57777140.74465181] [0.209273650.438364760.90326771]] [[0.623240850.654584120.41754146] [0.205066020.753640.5395965] [0.345995080.222406420.99718073] [0.672856060.50080970.1211656 ]]] 上面的示例只演示到了三维随机小数数组,如果要创建更多维度,在np.random.rand()函数的参数中添加即可。 创建随机整数数组可使用np.random.randint()函数,使用函数的第1和2个参数分别指定随机整数的起始值和终止值,使用size参数指定随机整数的维度。下面分别创建单个随机整数,一维、二维和三维随机整数数组,示例代码如下: #chapter3\3-2\3-2-5.ipynb import numpy as np #导入NumPy库,并命名为np rndint=np.random.randint(10,99) #创建单个随机整数 arr1=np.random.randint(10,99,size=(3)) #创建一维随机整数数组 arr2=np.random.randint(10,99,size=(3,2)) #创建二维随机整数数组 arr3=np.random.randint(10,99,size=(3,2,4)) #创建三维随机整数数组 print(rndint) #打印单个随机整数 print(arr1) #打印arr1随机整数数组 print(arr2) #打印arr2随机整数数组 print(arr3) #打印arr3随机整数数组 运行结果如下: #打印的rndint随机整数如下所示 26 #打印的arr1随机整数数组如下所示 [524880] #打印的arr2随机整数数组如下所示 [[2989] [7698] [5659]] #打印的arr3随机整数数组如下所示 [[[56719713] [72672426]] [[88868898] [18299023]] [[55628518] [91357834]]] 3.2.4转换数组 通过前文我们已了解了NumPy数组的结构及创建方式,但在实际工作中,不但需要创建数组,很多时候更需要将DataFrame表格和Series数据转换为数组。 1. DataFrame表格转换为数组 首先读取Excel文件中的数据,如图31所示,将信息表数据读取给df变量,df是DataFrame类型表格,再分别使用np.array()函数、df.to_numpy()函数和df.values属性将df表转换为数组,示例代码如下: 图31被读取的Excel文件 #chapter3\3-2\3-2-6.ipynb import numpy as np,pandas as pd #导入NumPy库和Pandas库,并分别命名为np和pd df=pd.read_excel('3-2-6.xlsx','信息表') #读取Excel中的信息表数据 arr1=np.array(df) #使用np.array()函数转换为数组 arr2=df.to_numpy() #使用df.to_numpy()函数转换为数组 arr3=df.values #使用df.values属性转换为数组 print(arr1) #打印arr1数组 运行结果如下: [['张三' Timestamp('2020-11-05 00:00:00') 12000] ['李四' Timestamp('2018-06-03 00:00:00') 14000] ['王二' Timestamp('2019-10-19 00:00:00') 13500]] 在上面的代码中,变量arr1、arr2和arr3返回的数组结果均相同,所以只打印了arr1数组。 2. Series数据转换为数组 Series数据也可以转换为数组,同样用np.array()函数、s.to_numpy()函数和s.values属性3种不同的方法将Series数据转换为数组,同样使用图31所示的Excel文件,读取并赋值给df变量,然后循环读取df中的每列数据,使用不同的方法转换为数组,示例代码如下: #chapter3\3-2\3-2-7.ipynb import numpy as np,pandas as pd #导入NumPy库和Pandas库,并分别命名为np和pd df=pd.read_excel('3-2-7.xlsx','信息表') #读取Excel中的信息表数据 for t,s in df.items(): print(t) #打印df列索引名称 arr1=np.array(s) #使用np.array()函数转换列数据为数组 arr2=s.to_numpy() #使用s.to_numpy()函数转换列数据为数组 arr3=s.values #使用s.values属性转换列数据为数组 print(arr3) #打印arr3数组 print('------------------') 运行结果如下: 姓名 ['张三' '李四' '王二'] ------------------ 入职日期 ['2020-11-05T00:00:00.000000000' '2018-06-03T00:00:00.000000000' '2019-10-19T00:00:00.000000000'] ------------------ 基础工资 [12000 14000 13500] ------------------ 上面的代码是将df表中每列数据循环出来赋值给s变量,s变量中存储的就是Series数据。再通过3种不同方法分别转换赋值给变量arr1、arr2和arr3,它们存储的数据相同,并且均是一维数组。 3.3NumPy数组的预处理 在对数组做运算之前,可能会对数据做一些预处理。例如数据类型的转换,缺失值的处理,重复值的处理等。如果没做好这些预处理,后续数组的运算将无法进行下去。 3.3.1类型转换 虽然要求NumPy数组的数据类型相同,但仍可能会遇到数据类型不一致的数组,或者用户需要将数组转换成指定的数据类型。数组的数据类型转换可以使用astype()函数,示例代码如下: #chapter3\3-3\3-3-1.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array([100,'123',99]) #arr数组 print(arr.astype('int')) #转换为整数类型 print(arr.astype('float')) #转换为小数类型 print(arr.astype('str')) #转换为字符串类型 运行结果如下: [10012399] [100.123.99.] ['100' '123' '99'] 上面代码中只演示了'int'(整数)、'float'(小数)和'str'(字符串)3种常见数据类型的转换,更详细的数据转换类型见表31。 表31数据类型 类型名称简写注释 bool?,b1布尔型数据类型(True 或者 False) int8b,i1字节(-128~127) int16h,i2整数(-32768~32767) int32i,i4整数(-2147483648~2147483647),可表示为int int64q,i8整数(-9223372036854775808~9223372036854775807) uint8B,u1无符号整数(0~255) uint16 H,u2无符号整数(0~65535) uint32I,u4无符号整数(0~4294967295) uint64Q,u8无符号整数(0~18446744073709551615) float16f2, e半精度浮点数,包括1个符号位,5个指数位,10个尾数位 float32f ,f4单精度浮点数,包括1个符号位,8个指数位,23个尾数位 float64d ,f8双精度浮点数,包括1个符号位,11个指数位,52个尾数位,可表示为float 续表 类型名称简写注释 stra, S字符串,只能包含ASCII 码字符,S 或a后带数字表示字符串长度,超出部分将被截断,例如S20、a10 unicodeUUnicode字符串,U后带数字表示字符串长度,超出部分将被截断,例如U20 datetime64M8年('Y')、月('M')、周('W')、天('D')、小时('h')、分钟('m')、秒('s')、毫秒('ms')、微秒('μs')等 timedelta64表示时间差,年('Y')、月('M')、周('W')、天('D')、小时('h')、分钟('m')、秒('s')、毫秒('ms')、微秒('μs') 在表31中的datetime64(日期类型)的转换也比较常见,将文本型日期转换为标准日期没问题,但如果将数字转换为对应的日期,处理方式有些不同,示例代码如下: #chapter3\3-3\3-3-2.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array([0,12525,145]) #arr数组 print(arr.astype('datetime64[D]')) #转换为日期类型 运行结果如下: ['1970-01-01' '2004-04-17' '1970-05-26'] 通过观察运行的结果,发现数字转换为日期时,日期的第1天是从1970/1/1开始的,而不同开发环境的起始日期可能不相同,好在Pandas提供了pd.to_datetime()函数,可以让用户自定义起始日期,例如转换arr=np.array([0,12525,145]),示例代码如下: #chapter3\3-3\3-3-3.ipynb import numpy as np,pandas as pd #导入NumPy库和Pandas库,并分别命名为np和pd arr=np.array([0,12525,145]) #arr数组 print(pd.to_datetime(arr,unit='D',origin='1899-12-30')) #转换为日期类型 运行结果如下: DatetimeIndex(['1899-12-30', '1934-04-16', '1900-05-24'], dtype='datetime64[ns]', freq=None) 上面代码的核心函数是pd.to_datetime(),第1参数指定要转换arr数组,unit='D'表示把arr数组中的数字视为单位天,origin='18991230'用于设置起始日期。 下面测试一下将Excel文件中的数字转换成对应的日期,如图32和图33所示,示例代码如下: #chapter3\3-3\3-3-4.ipynb import numpy as np,pandas as pd #导入NumPy库和Pandas库,并分别命名为np和pd df=pd.read_excel('3-3-4.xlsx','出生日期表') #读取Excel中的出生日期表数据 df['出生日期']=pd.to_datetime(df['出生日期'],unit='D',origin='1899-12-30') #将出生日期列数字转换为日期 df#输出转换后的效果 运行结果如图33所示。 图32出生日期转换前 图33出生日期转换后 注意: Pandas和NumPy中的很多函数都有dtype参数,表明可以在参数中设置数据类型,关于更多的数据类型可以参考表31。 3.3.2缺失值处理 缺失值是指没有任何值的空元素,例如导入Excel文件后,如果某个单元格没有任何值,则会显示为NaN或者NaT(缺失时间)。当然,在NumPy中也可以通过np.nan来生成缺失值。 要判断数组中是否有缺失值,可使用np.isnan()函数,将返回由布尔值组成的数组。还可以给缺失值填充指定的值,例如将缺失值填充数字100,示例代码如下: #chapter3\3-3\3-3-5.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array([2,3,np.nan,36,np.nan,99]) #arr数组 print(arr) #打印arr数组 print(np.isnan(arr)) #打印arr数组的每个元素是否是缺失值 arr[np.isnan(arr)]=100 #将arr数组中的所有缺失值填充为100 print(arr) #再次打印arr数组 运行结果如下: #arr数组返回结果如下所示 [ 2. 3. nan 36. nan 99.] #判断arr数组是否是缺失值,返回结果如下所示 [False False True False True False] #将arr数组缺失值填充为100,返回结果如下所示 [ 2. 3. 100. 36. 100. 99.] 3.3.3重复值处理 在做数据预处理时,去重复处理是比较常见的处理方式。在NumPy中,可以使用np.unique()函数,示例代码如下: #chapter3\3-3\3-3-6.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array([9,1,2,2,1,5,9]) #arr数组 print(np.unique(arr)) #打印去重复之后的arr数组 运行结果如下: [1 2 5 9] 如果对多维数组做去重复处理,最后返回的是具有唯一值的一维数组,示例代码如下: #chapter3\3-3\3-3-7.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array([[2,1,1],[2,5,1],[3,1,7]]) #arr多维数组 print(np.unique(arr)) #打印去重复之后的arr数组 运行结果如下: [1 2 3 5 7] 3.4NumPy数组维度转换 在做数据处理时,数据的呈现方式可能并不是用户希望的,这就需要用户对数据进行转换,本节讲解不同维度数组的相互转换,以及不同维度数组的合并。学会这些操作,用户在转换数据结构时将更加得心应手。 3.4.1数组维度转换 本节讲解一维数组与多维数组的相互转换,本质就是数据的重新组合。用户如果需要对一组数据拆解或者合并,维度转换是不错的选择。 1. 一维数组转换为多维数组 数组的维度转换使用reshape()函数,下面演示一下将一维数组转换为二维数组和三维数组,示例代码如下: #chapter3\3-4\3-4-1.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.arange(1,13) #生成1~16连续值数组 print(arr.reshape(3,4)) #打印生成的二维数组 print(arr.reshape(3,2,2)) #打印生成的三维数组 运行结果如下: #生成的二维数组结果如下 [[ 1234] [ 5678] [ 9101112]] #生成的三维数组结果如下 [[[ 12] [ 34]] [[ 56] [ 78]] [[ 910] [1112]]] 2. 多维数组转换为多维数组 使用reshape()函数也可以将多维数组转换为多维数组,例如可以将二维数组转换为另一种尺寸的二维数组,或者转换为其他多维数组,示例代码如下: #chapter3\3-4\3-4-2.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) #arr二维数组 print(arr.reshape(2,6)) #打印生成另一种二维数组 print(arr.reshape(2,2,3)) #打印生成的三维数组 运行结果如下: #生成的另一种二维数组结果如下 [[ 123456] [ 789101112]] #生成的三维数组结果如下 [[[ 123] [ 456]] [[ 789] [101112]]] 3. 多维数组转换为一维数组 将多维数组转换为一维数组,除了使用reshape()函数之外,也可以使用flatten()函数,并且这种转换方式更为直接,示例代码如下: #chapter3\3-4\3-4-3.ipynb import numpy as np #导入NumPy库,并命名为np arr=np.array([[1,2,3],[4,5,6],[7,8,9]]) #arr二维数组 print(arr.reshape(arr.size)) #计算多维数组元素个数,转换为一维数组 print(arr.flatten()) #直接使用NumPy内置函数转换为一维数组 运行结果如下: [123456789] [123456789] 注意: 数组之间的转换要遵循的原则是转换后的元素个数必须与转换前的元素个数相同,否则转换不成功。 3.4.2数组合并 数组合并就是对两个及以上的数组做拼接,本节将讲解多个一维数组的合并,以及多个多维数组的合并。这些操作对数据的合并处理将非常有用。 1. 一维数组合并 如果要将多个一维数组合并成一个一维数组,首先要将多个一维数组组织在列表中,然后使用np.concatenate()函数对列表中的一维数组合并,示例代码如下: #chapter3\3-4\3-4-4.ipynb import numpy as np #导入NumPy库,并命名为np arr1=np.array([1,2,3]) #arr1一维数组 arr2=np.array([4,5,6]) #arr2一维数组 lst=[arr1,arr2] #将arr1和arr2组合到列表中 arr3=np.concatenate(lst) #合并处理 print(arr3) #打印合并后的arr3数组 运行结果如下: [123456] 2. 多维数组合并 合并多个多维数组与合并多个一维数组方法基本相同,但由于多维数组合并需要用户确认是横向合并,还是纵向合并,所以要在np.concatenate()函数中对axis参数指明合并方向,axis=1表示横向合并,axis=0表示纵向合并,示例代码如下: #chapter3\3-4\3-4-5.ipynb import numpy as np #导入NumPy库,并命名为np arr1=np.array([[1,2,3],[4,5,6]]) #arr1多维数组 arr2=np.array([[7,8,9],[10,12,13]]) #arr2多维数组 lst=[arr1,arr2] #将arr1和arr2组合到列表中 arr3=np.concatenate(lst,axis=1) #横向合并 print(arr3) #打印横向合并后的arr3数组 arr4=np.concatenate(lst,axis=0) #纵向合并 print(arr4) #打印纵向合并后的arr4数组 运行结果如下: #横向合并多维数组返回结果如下所示 [[ 123789] [ 456101213]] #纵向合并多维数组返回结果如下所示 [[ 123] [ 456] [ 789] [101213]] 3.5Series数据的创建 Series可以视为DataFrame表格的列,之前的Series数据都是通过拆解DataFrame表格获取的,如果需要用户创建,则可以使用pd.Series()函数,该函数的参数说明如下所示。 pd.Series(data=None,index=None,dtype=None,name=None,copy=False) data: 提供创建Series的数据,可以是列表、数组和字典等可迭代对象。 index: 提供Series的索引数据,允许有重复值,默认为RangeIndex(0,1,2,…,n)。 dtype: 设置Series数据的类型,如未指定则自动推断,关于数据类型可参考表31。 name: 设置Series数据的名称。 copy: 是否复制输入数据。 接下来演示一下使用pd.Series()函数在创建Series数据时的各种设置。 1. 创建Series数据 在创建Series数据时,可以使用列表、数组等可迭代对象作为pd.Series()函数的data参数,以列表为例,示例代码如下: #chapter3\3-5\3-5-1.ipynb import pandas as pd #导入Pandas库,并命名为pd s=pd.Series(['张三','李四','王麻子'],name='姓名') #用列表创建Series,并设置名称 s #返回Series数据 运行结果如下: 0张三 1李四 2王麻子 Name:姓名, dtype: object 2. 用字典创建Series数据 如果使用字典作为pd.Series()函数的data参数,则字典的键对应设置为Series数据的索引,示例代码如下: #chapter3\3-5\3-5-2.ipynb import pandas as pd #导入Pandas库,并命名为pd s=pd.Series({'A':'张三','B':'李四','C':'王麻子'}) #用字典创建Series s #返回Series数据 运行结果如下: A张三 B李四 C王麻子 dtype: object 3. 创建Series数据时设置索引 如果在创建Series数据时,需要设置对应的索引,则可以在index参数中设置,示例代码如下: #chapter3\3-5\3-5-3.ipynb import pandas as pd #导入Pandas库,并命名为pd s=pd.Series(['张三','李四','王麻子'],index=['A','B','C']) #创建Series时设置索引 s #返回Series数据 运行结果如下: A张三 B李四 C王麻子 dtype: object 4. 创建Series数据时设置类型 如果在创建Series数据时,需要设置数据类型,则可以在dtype参数中设置,示例代码如下: #chapter3\3-5\3-5-4.ipynb import pandas as pd #导入Pandas库,并命名为pd s=pd.Series([2,3,5],dtype='float') #创建字典时设置数据类型 s #返回Series数据 运行结果如下: 02.0 13.0 25.0 dtype: float64 3.6DataFrame表格的创建 本应该在2.5节讲解DataFrame表格的创建,为什么要放在本章的最后一节学习呢?原因在于之前没有讲解NumPy数组,而用数组创建DataFrame表又是非常重要的方式,因此在讲解数组之后,再系统地讲解DataFrame表格的创建。 虽然我们对DataFrame表格结构已不陌生,因为在前面的章节中已学习过通过获取外部文件数据来生成DataFrame表格,但还没尝试通过创建的方式来生成DataFrame表格。在实际的数据处理环境中,可能会经常构造DataFrame表格,所以非常有必要学习DataFrame表格的创建,创建DataFrame表格使用pd.DataFrame()函数,该函数的参数说明如下所示。 pd.DataFrame(data=None,index=None,columns=None, dtype=None, copy=False) data: 提供创建DataFrame表格的数据,可以为数组、列表和字典。 index: 提供DataFrame表格的行索引数据,默认为RangeIndex(0,1,2,…,n)。 columns: 提供DataFrame表格的列索引数据,默认为RangeIndex(0,1,2,…,n)。 dtype: 数据类型,只允许设置单个数据类型,如果没有设置则自动推断。 copy: 是否从输入复制数据。仅影响DataFrame/二维数组输入。 3.6.1使用NumPy数组创建DataFrame表格 将提供的数组放置在pd.DataFrame()函数的data参数中,并且在columns参数中指定表的列索引(列标题),示例代码如下: #chapter3\3-6\3-6-1.ipynb import numpy as np,pandas as pd #导入NumPy库和Pandas库,并分别命名为np和pd arr=np.array([ ['张三','男',28], ['李四','女',25], ['王五','女',19] ]) #二维数组 df=pd.DataFrame( data=arr, #提供的二维数组 columns=['姓名','性别','年龄'] #设置列索引 ) df #返回DataFrame表格 运行结果如图34所示。 图34使用NumPy数组创建DataFrame表格 3.6.2使用Python列表创建DataFrame表格 将提供的列表放置在pd.DataFrame()函数的data参数中,并且在columns参数中指定表的列索引(列标题),示例代码如下: #chapter3\3-6\3-6-2.ipynb import numpy as np,pandas as pd #导入NumPy库和Pandas库,并分别命名为np和pd lst=[ ['张三','男',28], ['李四','女',25], ['王五','女',19] ] #嵌套的列表 df=pd.DataFrame( data=lst, #提供的列表 columns=['姓名','性别','年龄'] #设置列索引 ) df #返回DataFrame表格 运行结果如图35所示。 图35使用Python列表创建DataFrame表格 3.6.3使用Python字典创建DataFrame表格 Python中的字典是由键值对组成的,也可以使用字典创建DataFram表格,并且创建方式更为多样化。用字典创建DataFrame表格的固定格式是: {列索引:列数据},也就是说字典的键对应DataFrame表格的列索引,值对应列数据,列数据可以是列表、数组和Series。由于字典的键是DataFrame表格的列索引,所以不需要在columns参数中指定列索引,不过可以设置index参数,这样DataFrame表格的行索引和列索引就都是自定义的了。 1. 字典值为列表 字典的值是列表,创建DataFrame表格时,示例代码如下: #chapter3\3-6\3-6-3.ipynb import numpy as np,pandas as pd #导入NumPy库和Pandas库,并分别命名为np和pd dic={ '姓名':['张三','李四','王五'], '性别':['男','女','女'], '年龄':[28,25,19] } #值为列表的字典 df=pd.DataFrame( data=dic, #提供的字典 index=['NED001','NED002','NED003'] #设置行索引 ) df #返回DataFrame表格 运行结果如图36所示。 图36字典值为列表,创建DataFrame表格 2. 字典值为数组 字典的值是数组,创建DataFrame表格时,示例代码如下: #chapter3\3-6\3-6-4.ipynb import numpy as np #导入NumPy库,并命名为np import pandas as pd #导入Pandas库,并命名为pd dic={ '姓名':np.array(['张三','李四','王五']), '性别':np.array(['男','女','女']), '年龄':np.array([23,25,19]) } #值为数组的字典 df=pd.DataFrame( data=dic, #提供的字典 index=['NED001','NED002','NED003'] #设置行索引 ) df #返回DataFrame表格 运行结果如图37所示。 图37字典值为数组,创建DataFrame表格 3. 字典值为Series 字典的值是Series,因为Series数据只是加了索引的数组而已,所以Series的索引就是DataFrame表格的行索引。pd.DataFrame ()函数的index和columns两个参数都不用设置,也能达到自定义行索引和列索引的效果,示例代码如下: #chapter3\3-6\3-6-5.ipynb import numpy as np #导入NumPy库,并命名为np import pandas as pd #导入Pandas库,并命名为pd dic={ '姓名':pd.Series(['张三','李四','王五'],['NED001','NED002','NED003']), '性别':pd.Series(['男','女','女'],['NED001','NED002','NED003']), '年龄':pd.Series([23,25,19],['NED001','NED002','NED003']) } #值为Series数据的字典 df=pd.DataFrame(data=dic) #提供的字典 df #返回DataFrame表格 运行结果如图38所示。 图38字典值为Series,创建DataFrame表格