19。1安装Anaconda Anaconda是Python的一个开源发行版本,它预装了丰富的第三方库,而且主要面向科学计算和数据分析,使用起来要比原版的Python更省时省力。 Anaconda官方下载网址为:https:www。continuum。iodownloads。下载和安装的方法很简单,若有问题可以在网上搜索相关内容学习解决。 安装Anaconda之后,就会发现在Anaconda目录下同时安装了JupyterNotebook、Spyder等工具,我们接下来主要使用Spyder进行开发。关于Spyder的使用方法非常简单,大家也可以去网上搜索学习。 虽然Anaconda已经预装了很多常用的包,但有时我们也需要自己安装一些包。可以在开始菜单中选择AnacondaAnacondaPrompt命令,在命令行输入condainstall(代表包名)即可安装,也可以输入pipinstall。 19。2数据分析包Pandas Pandas是Python的一个数据分析包,Anaconda安装时已经附带安装了Pandas包。 Pandas数据结构有三种:Series(一维数组)、DataFrame(二维数组)和Panel(三维数组),其中最常用的是前两种数据结构。 19。2。1Series Series(序列)用于存储一行或一列数据,以及与之相关的索引的集合。 语法格式如下: Series(〔数据1,数据2,。。。。。。〕,index〔索引1,索引2,。。。。。。〕) 例: frompandasimportSeries sSeries(〔张三,李四,王五〕,index〔1,2,3〕) print(s) 输出结果如下: 1张三 2李四 3王五 dtype:object 上面建立序列时指定了索引,若不指定,则默认的索引值从0开始。如下: sSeries(〔张三,李四,王五〕) 输出结果为: 0张三 1李四 2王五 dtype:object 索引值也可以为字符串。如下: frompandasimportSeries sSeries(〔张三,李四,王五〕,index〔A,B,C〕) print(s) 输出结果为: A张三 B李四 C王五 dtype:object 1、访问序列 (1)可以通过索引访问序列,如: frompandasimportSeries sSeries(〔张三,李四,王五〕) print(s) print(s〔0〕) print(s〔1:〕) 运行结果如下: 0张三 1李四 2王五 dtype:objectprint(s)输出 张三print(s〔0〕)输出 1李四 2王五 dtype:objectprint(s〔1:〕)输出 (2)通过值获取索引值 frompandasimportSeries sSeries(〔张三,李四,王五〕,index〔A,B,C〕) print(s。index〔s。values李四〕) 运行结果: Index(〔B〕,dtypeobject) (3)判断值是否存在 frompandasimportSeries sSeries(〔张三,李四,王五〕,index〔A,B,C〕) f李四ins。values print(f) 运行结果: True (4)定位获取 frompandasimportSeries sSeries(〔张三,李四,王五,孙六〕,index〔A,B,C,D〕) print(s〔〔0,2,1〕〕) 运行结果: A张三 C王五 B李四 dtype:object 2、修改序列 (1)追加序列,如: frompandasimportSeries sSeries(〔张三,李四,王五〕,index〔A,B,C〕) s1Series(〔孙六〕,index〔D〕) ss。append(s1) print(s) 运行结果: A张三 B李四 C王五 D孙六 dtype:object (2)修改序列的值 frompandasimportSeries sSeries(〔张三,李四,王五,孙六〕,index〔A,B,C,D〕) s〔1〕李飞 print(s) 运行结果: A张三 B李飞 C王五 D孙六 dtype:object 不知道索引,仅知道要修改的值,也可通过值查找到索引后,再修改序列的值。如: s〔s。index〔s。values李四〕〕李飞 这样也可以将李四修改为李飞。 (3)修改索引 frompandasimportSeries sSeries(〔张三,李四,王五,孙六〕,index〔A,B,C,D〕) s。index〔0,1,2,3〕 print(s) 运行结果: 0张三 1李四 2王五 3孙六 dtype:object (4)删除元素 frompandasimportSeries sSeries(〔张三,李四,王五,孙六〕,index〔A,B,C,D〕) ss。drop(A) print(s) 运行结果: B李四 C王五 D孙六 dtype:object (5)重新排序 可以按照索引排序,使用sortindex(ascendingTrue)方法对index进行排序操作。 frompandasimportSeries sSeries(〔张三,李四,王五,孙六〕,index〔A,B,C,D〕) ss。sortindex(ascendingFalse)ascendingFalse表示按降序排列 print(s) 运行结果: D孙六 C王五 B李四 A张三 dtype:object (6)重置索引 重置索引可以使用reindex()。如果index列表中的元素多于序列的值,可用fillvalue0这样的语句填充。 ss。reindex(〔D,C,B,A〕) 如果index列表中的元素多于序列的值,可用fillvalue0这样的语句填充。 ss。reindex(〔D,C,B,A〕,fillvalue0) 19。2。2DataFrame DataFrame(数据框架)用于存储多行和多列的数据集合。它是Series的容器,类似于Excel中二维表格。 定义一个DataFrame的语法格式如下: dfDataFrame({列名1:序列1,列名2:序列2,。。。。。。。列名n:序列n},index序列) 例如,有如下二维表: 姓名 性别 年龄 张三 男 18hr李四 女 19hr王五 男 17hr保存到DataFrame中可以用如下方法: frompandasimportSeries frompandasimportDataFrame nameSeries(〔张三,李四,王五〕) sexSeries(〔男,女,男〕) ageSeries(〔18,19,17〕) dfDataFrame({姓名:name,性别:sex,年龄:age}) print(df) 运行结果: 姓名性别年龄 0张三男18 1李四女19 2王五男17 从上例可以看出,虽然我们省缺了索引,但系统自动添加了从0开始的索引值。 19。3DataFrame的基本操作 1、访问方式 (1)获取行 print(df〔1:2〕)获取第1行的值 输出结果: 姓名性别年龄 1李四女19 print(df〔1:3〕)获取第1行到第2行的值 输出结果: 姓名性别年龄 1李四女19 2王五男17 (2)获取列 print(df〔姓名〕)获取姓名列的值 输出结果: 0张三 1李四 2王五 Name:姓名,dtype:object 另一种方法: print(df〔df。columns〔0:1〕〕)先按照索引号获取列名,再按照列名读取 输出结果和上面的方法完全一致。 还有一种情况,是获取唯一值,即将列内的重复值中多余的删除,仅留下互不相同的值。所用的到方法是unique()。 sex1Series(df〔性别〕。unique()) print(sex1) 输出结果: 0男 1女 dtype:object (3)获取指定位置的值 print(df。at〔1,姓名〕)格式为变量名。at〔行号,列名〕 输出结果: 李四 (4)获取块的值 print(df。iloc〔0:2,1:3〕)格式为变量名。iloc〔行号1:行号2,列号1:列号2〕 输出结果: 性别年龄 0男18 1女19 print(df。iloc〔:,1:2〕)获取性别列的值 运行结果: 性别 0男 1女 2男 2、修改、删除、增加行和列 (1)修改列名 print(df。columns) df。columns〔name,sex,age〕 print(df。columns) 输出结果: Index(〔姓名,性别,年龄〕,dtypeobject) Index(〔name,sex,age〕,dtypeobject) 可见,列名已经由姓名、性别、年龄修改为age、sex、age了。但这种修改必须把全部列名都一一列举,不能有遗漏,否则就会出错。如: df。columns〔name,sex〕 此时会报错:ValueError:Lengthmismatch:Expectedaxishas3elements,newvalueshave2elements。 (2)修改行索引 df。index〔1,2,3〕 (3)删除行 df。drop(1,axis0)axis0表示行轴,也可以省略 (4)删除列 df。drop(‘性别’,axis1)axis0表示列轴 也可以使用另一种方法: deldf〔性别〕 (5)增加列 df〔电话〕〔1111111,2222222,3333333〕 print(df) 运行结果: 姓名性别年龄电话 0张三男181111111 1李四女192222222 2王五男173333333 (6)增加行 df。loc〔len(df)〕〔孙六,男,20〕 (7)追加 frompandasimportSeries frompandasimportDataFrame nameSeries(〔张三,李四,王五〕) sexSeries(〔男,女,男〕) ageSeries(〔18,19,17〕) dfDataFrame({姓名:name,性别:sex,年龄:age})建立DataFrame,变量名为df name1Series(〔孙六,候七〕) sex1Series(〔男,女〕) age1Series(〔19,17〕) df1DataFrame({姓名:name1,性别:sex1,年龄:age1}) 建立DataFrame,变量名为df1 dfdf。append(df1,ignoreindexTrue) 将对df1追加到df后面,参数ignoreindexTrue表示重新索引 print(df) 运行结果: 姓名性别年龄 0张三男18 1李四女19 2王五男17 3孙六男19 4候七女17