python基础:数据分析_Pandas

参考视频:

https://www.bilibili.com/video/BV1HJ411j7NG?p=2

 一、Pandas基础操作

 

▲:Pandas常用数据结构

 

 

 

 

1)Series创建

使用 pd.Series() 函数来创建一个Series对象,括号中的参数通常为一个列表、字典、数组等:

也可以自己对 series 对象配置索引:

 

 

参数为一个数组:

 

 

参数为一个字典:

 

 

如上图所示,此时,字典的键就是series对象的索引。

 

2)Series的常用属性及方法

series.values : 返回Series对象所有元素

 

 

Series.index : 返回索引

 

 

Series.dtypes : 返回数据类型

 

 

Series.ndim : 返回对象维度

 

 

Series.size : 返回对象中元素个数

 

 

 

Series对象还可以根据切片、索引来访问

 

 

注意上图中,当使用标签索引来访问Series对象时,不再是左闭右开的访问了。

 

Series.append(a) 函数:用来返回一个添加了a对象之后的series对象,但注意,使用 append() 函数并不会改变series对象,只是返回一个新的对象。

 

 

 

Series.drop() :用来删除series对象中的元素,返回一个视图,但是不会修改原对象;但是如果加上 inplace = True 参数,就可以对原对象进行修改。

 

 

 

 

 

3)DataFrame类对象的创建

我们可以将series看做是一个dataframe的一列,或者说dataframe就是由series构成。

 

创建DataFrame对象时,里面的数据参数可以是列表、字典或数组。index 代表每一行的索引的名字,columns 参数代表列的名字:

使用列表作为数据参数创建DataFrame对象:

使用字典作为数据对象来创建DataFrame对象:

字典的键名就是df对象的列的名字,即 columns 的值。

 

 

使用数组结构来创建DataFrame对象:

如下图所示,可以使用 index 来修改每一行的索引的名字:

 

 

 

4)DataFrame的常用属性

 

 

df.values:将数据集以数组的形式输出:

 

 


▲数据的获取和保存:

虽然我们学习了通过numpy获取外部数据,但是我们还是常用pandas做数据分析,因为pandas读取出来的结构是数据框格式(即 dataframe的格式),非常类似于数据库中的表结构,非常有利于我们以后的分析。

 

 

 

开始之前先将 os库也导入,它可以用来查看当前路径等等,并可以设置python当前默认路径。

 

 

假如我们需要读取的数据都在 C:\\Users\\Mark 中,可以将python默认路径改为:

 

 

这样我们读取数据时,写路径就不需要再 加上 C:\\Users\\Mark 了

 

1)读取csv数据:使用 df = pd.read_csv() 函数(注意,读取出来的格式是数据框 dataframe 格式的数据,所以将读取出来的数据复制给 df对象)

假如桌面上有:

 

 

使用:

pd.read_csv() 函数来读取csv数据:

 

 

使用 df.head(5) 来查看前5行数据

   df.tail(5)来查看后5行数据

df.types

输出每一变量的类型

 

 

还可以在 pd.read_csv() 函数 使用参数 dtype (注意不加s)来改变每一列(每一个series)的类型:

 

 

 

还可以在 pd.read_csv() 函数 使用参数 nrows = 5 来只读取数据的前5行:

 

pd.read_csv() 函数读取时默认的 delimiter 分隔符为英文的 逗号, 

pd.read_csv() 函数的参数 header = 1 表示想从第一行开始读取,即将第一行作为表头:

 

2)读取excel数据:使用 df = pd.read_excel() 函数

假如桌面上有:

 

使用 pd.read_excel() 函数来读取excel:

 

注意,pd.read_excel() 函数的参数与 pd.read_csv() 函数的参数基本相同,但最新版的pandas的 pd.read_excel() 函数不支持 encoding 参数,直接读取就可以了。

此外,pd.read_excel() 函数中还增加了一个 sheet_name 参数,指读取excel的哪一页,也可以不用工作页的名字,用0代表第一页,1代表第二页等:

 

如果想同时读取两页,只需:

那么如何将两个工作页读取到一个大的数据框中呢?

 

上图中,pd.concat()是拼接函数,拼接的结果需要放在一个新的df对象data_all中,循环每执行一次,就访问excel中的一页,就将data_all(全局变量) 与在excel 新页中读取到的数据data(局部变量,每读取一次都会覆盖上一次的读取结果)进行拼接,实现读取全部页数据。ignore_index = True 参数表示将左边的索引号按顺序写下去,如果不加该参数就会如下图所示:

 

 

3)将读取的数据框保存:

我们使用 df.to_csv() 函数来保存数据框为 csv 文件。一般加上一个参数 index = False ,表示不将数据框的索引也保存进数据, 如果不加该参数,数据的最前面一列就会保存上列索引。

 

 如下图所示:

 

我们使用 df.to_excel() 函数来将数据框保存为 excel 文件:

 

 

▲数据筛选

 

 

 

查看前6行可以用切片的方式:

df[:6]

 

假如想选择某一列(某一个series),可以有两种方法:

df.列名

df['列名']

如果想选择多列:

df[ ['列名1','列名2'] ]

 

某些列的前几行:

 

 

loc [A,B]和 iloc [A,B]的用法:

单独取出某一(某些)行列:

loc函数用法中,里面的参数A,B都是行的标签名或者列的名字,而不是数字

iloc函数用法中,里面的参数都是行的标签名或者列的位置(数字),而不是名字

 

loc函数:

df.loc[:,'列名']

df.loc[:,['列名1',‘列名2’]]

(逗号前的冒号表示取所有行)

 

如果还需要限制行标签:

df.loc[行索引名,'列名']

df.loc[[行索引名1,行索引名2],['列名1',‘列名2’]]

注意,行索引名不需要加引号

 

 

loc函数还可以进行条件查询:

 

 

iloc函数:

取2~4列:

 

取2,5两列:

 

取第四行的第二和第五列:注意此时的前面的参数写的是索引而不是行索引名字,所以前面一个参数应该是3

 

 

 

注意上图中的区别,因为loc参数是行索引的名字,所以取的是从索引名为0的行到索引名为3的行

而iloc函数中参数为索引值,所以取的第1行(行索引为0)到第3行(行索引为2)(因为python是左闭右开)

 

增删改查和条件查询:

条件查询,查询 表头1 该列内容为21的 那一行的数据:

 

 在此基础上限定列:

 

 或者不将列的名字写成列表形式:

 

多个条件时,每个条件用括号括起来,并用 & 连接:

 

如果是表示 或 ,用符号 | 连接:

 

 

数据增加 列:

 

 

数据列删除

drop(),注意如果要删除列,drop()函数中参数 axis = 1 时是删除列,axis = 0时是删除行

因为axis = 0 时是按照行进行遍历,axis = 1 时是按照列的方向进行遍历

如删除新增列1:

 

但是这种方式只是返回了一个 删除了 新增列1 的视图,原数据并未删除 新增列1,如果想要原数据也删除,需要增加参数 inplace = True

还有一种删除 是 del df['列名']

但是这种方式只能一列列删,此种方式会删除原数据中的列

同时删除两列,就把要删除的多个列以列表的形式作为参数:

 

 

按行删除:

其中第一个参数是行标签的名字,而不是索引值, axis 一定要设定为0

删除多行:

 

 

插入:

df.insert() 函数

假如将新增列2 插入原数据的第一列:

 

如上图所示,首先将要插入的 series对象赋值给 mid,然后使用 order.insert()函数

其中,order.insert(0,‘插入列1’,mid) 中, 0 表示要插入哪一列,‘插入列1’ 表示新插入的列的名字,mid 表示要插入的series

 

修改:

修改还是使用 loc和iloc函数,先找到列(行),然后再修改

 

 注意上图,因为是loc函数,索引使用 列的名字 或者 行索引的名字找到某一列(行),然后后面一个参数是要修改的哪一个位置,上图即先找到 表头1 = 1 所在的行,然后修改 表头1 的值为10000

 

上图还是用loc函数进行修改,因此 0 代表行索引名字为0 的那一行,然后找到 表头2 这一列,将表头2 的值修改为20000

 

修改列名:

order.rename()

 

如上图所示,注意使用字典的符号 {} 来修改的

修改行索引的名字:

 

posted @ 2021-08-28 22:26  SanFranciscoo  阅读(660)  评论(0编辑  收藏  举报