Pandas入门—Series和DataFrame
为了入门pandas,我们需要熟悉两个常用的工具数据结构:Series和DataFrame
Series:
1.Series创建:
Series是一种一维的数组型对象,它包含了值序列,并且也包含了数据标签,称之为索引(index)。是不是看不懂我在说什么,没关系接下来让我们看看具体的例子:
1.1用列表初始化
import pandas as pd
这样我们就创建了一个Series对象
左边的一列从0到2,就是刚刚所得索引,对应的值就是列表[“a”,“b”,“c”]
我们可以通过data.index和data.values 来分别访问index和values
这里我们创建的Series是默认生成索引的,默认生成索引是从0到N-1,N为列表的长度
接下来让我们来看看指定索引的生成:
1.2.用字典进行初始化
从另外一个角度来看Series,其实我们可以认为它是一个长度固定且有序的字典,因为它将索引值和数据按位置配对:
2.Series的性质:
前面我们就说了可以用.index和.values可以访问Series的索引和值这里我们就不再重复了
2.1访问Series的值
前面我们说过可以用字典来构造Series,所以我们也可以用字典的形式来访问
我们也可以用data.loc[”a“]进行访问,关于loc,后面讲到DataFrame我们会学习到,这里就仅仅提一下
2.2判断值是否在Series里面
直接用索引进行判断
2.3 Series的算数运算:
例如:
很明显这里的data*4,就是data里面的每个值都乘了4,我们再看一个例子:
这里的结果其实就是以e为底数,data的值为指数,算出来的结果
3.缺失值的产生:
对于缺失值,是我们学习pandas经常会遇到和需要处理的,这里仅仅说明几种为什么会出现缺失值的情况
缺失值pandas一般用NaN(not a number) 来表示
1.在创建Series时,我们用字典创建,并且指定了索引,但是我们指定的索引和字典里面的索引不一样,这样会导致值缺失。
例如:
这里我们指定的索引 “上海”,“北京”,“湖南”,“海南”,而字典里面没有"湖南",“海南”,所以为缺失值,而“湖北” ,字典里面有,但索引里面没有,就被舍弃了
2.两个Series进行加减乘除的时候,因为这两个Series里面的索引可能不一样,也会导致出现缺失值
我们拿“西瓜”和“香蕉”举例
西瓜 2.5元一斤,一个西瓜8斤,所以最后结果是20
而香蕉有价格5元一斤,但是没有斤两,所以最后结果是缺失的
DataFrame:
DataFrame 和二维的Series很像,**DataFrame既有行索引也有列索引,它可以被视为一个共享相同索引的Series的字典**,在DataFrame中,数据被存储为一个以上的二维块,而不是列表,字典或者其他一维数组的集合
(虽然DataFrame是二维的,但是可以利用分层索引在DataFrame中展现更高维度的数据)
1.DataFrame的构建:
1.1利用包含等长度列表或者NumPy数组的字典来形成DataFrame:
字典中的键会作为列索引
例如:
这里我指定了index,如果不指定的话,就会跟之前Series一样,默认分配索引
当然我们也可以指定列的排列顺序,比如,如果我们想让列的循序是 小美,小华,小明 。那么只需要改变column的参数即可
当然注意:这个地方,如果我们指定的columns中 出现字典中不存在的键,也会出现缺失值 例如
column中多了一个小东,所以小东的年龄,身高,体重都是缺失的
1.2利用包含字典的嵌套字典来构建DataFrame:
如果嵌套字典被赋值给DataFrame,pandas 会将字典的键作为列,将内部字典的键作为行索引
例如:
这里最外面的键“小明”,”小美“,”小华“就作为了列向量,内部的键"年龄",”体重“,"身高"就作为了行向量
这里也可以使用转置操作(交换行和列)
其实所谓的嵌套字典构造也不过就是初始化了行向量和列向量,可以在后面构造DataFrame时可以少传一个columns
1.3利用包含Series的字典构建DataFrame
这种方式构造其实和以上两种构造方式类似,无非就是用Series构造
2.DataFrame的索引操作【重要指数五颗星】
索引本身是不能修改的,但是索引对应的值可以修改
2.1布尔索引
这一点和Numpy极为相似,可以筛选出符合我们条件的数据
如图,这里我们得到了一组符合条件年龄大于18岁的一组布尔数据
再然后把这组布尔数据传回原来的data,就得到了符合条件的数据
2.2重建索引:
reindex是pandas对象的重要方法,该方法用于创建一个符合新索引的新对象,这个方法Series和DataFrame都可以使用
这里我们就拿DataFrame来举例:
由图我们很容易的看出行索引的顺序发生了改变,由于重新构建的索引多了一个“爱好”,所以为缺失值
reindex还有很多其他参数 例如 method,fill_value, limit,tolerance,level,copy。
这里我们就来研究研究method和fill_value
method有两种取值,’ffill‘ 为前向填充,'bfill’为后向填充
注意: reindex要填入method参数是,索引必须是可以排序的,递增或者递减,否则会报错
由于我们重新生成的索引"a",“b”,“c”,“d”,“e”,而原来的行索引没有"b",“e”,本来应该为NAN的,但是我们填了method = “ffill”,他的作用是用前面一个最近的未被替换的值进行替换
比如”a“我们没有替换,而”b“是新加的,而b刚好在”a“的下面,所以b的值就用a的值来填充 。后面”e“的值一样的
而”method = bfill“就是用后面一个最近的未被替换的值进行替换
这里的"c"是新添加的,而”d“是之前就有的,而”d“在”c“的后面,所以”c“的值就是用”d“的值去填充。而”e“它的后面没有值,所以为NAN
然后我们再来说说fill_value
fill_value比较好理解,就是出现缺失值的时候,填充什么,接着上面的例子,我们加一个fill_value = ”nna“,那么缺失值就会变为”nna“
2.3使用loc和iloc选择数据
loc函数是用index来进行切片,iloc函数是整数来进行切片
例如:
loc[ , ] 逗号前面是对行进行索引,逗号后面是对列进行索引
loc里面切片用index
而iloc里面用整数进行索引
例如:
这里需要注意用loc切片是包含结尾字母的,而用iloc切片是不包含最后数字结尾的
3.DataFrame的删除
DataFrame可以使用drop方法进行删除行或者列
drop默认axis = 0,所以不显示的指定axis的值,就会删除行 ,如果指定axis=1的话,就可以删除列
注意:drop返回的只一个新的对象,如果我们想要在原数据上进行修改那么还需要加一个参数 inplace = True
4.DataFrame与Dataframe之间的算数:
我们首先来看一种情况:
data1+data2由于内部的标签位置没有重叠,导致出现了缺失值,用add函数就可以避免这种情况:
这里面的data[“d”,"E]之所以为缺失值,是因为原来的data1和data2都没有这个值,另外一个同理
处理add函数还有sub,div,floordiv,mul,pow函数分别代表-,/,//,*,**
5.函数的应用和映射:
其实就是利用apply函数,将DataFrame中的值传入到函数中进行计算
例如:
这里就是把data的值传入到f中进行计算,axis=1指的是计算每一行。比如说第一行的最大值是3,最小值是0,所以差就是3
这里axis不指定的话,依然默认为0
6.排序与排名
如果是对索引进行排序的话用.sort_index()
对值进行排序用.sort_values(),并且需要使用by指定列进行排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1UghAFxH-1673406509698)(null)]
我们很明显看到”A“这一列进行了排序
也可以指定axis的值进行行或者列排序,如果不指定默认为0
用ascending参数来控制是升序还是降序,如果不指定默认为True,升序
排序的方法还有一个rank,这个方法有点绕,如果有需要的话,我后来再单独介绍这个方法。其实也不是很难理解,但是我目前还不知道这个函数到底有啥用
7.关于描述统计的概述与计算
7.1 sum函数
当axis=0时,sum函数是把每一列的值都加起来,axis=1时,则是把每一行的值加起来。axis默认为0,并且会默认排除缺失值,如果不想排除缺失值的话可以设置 skipna = False
以下很多方法,使用方式与sum类似,不类似别找我(狗头报命)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slOv4vtS-1673406509732)(null)]
这里演示以下describe函数
7.2唯一性,计数和成员属性
当我们遇到很多值是重复的时候,可以用.unique(),它会返回唯一的值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J4a0cfoT-1673406509763)(null)]
可以用value_counts()得到相同值的数量
isin执行向量化的成员属性检查,注意:isin要传入一个列表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1lTqbM0J-1673406509655)(null)]
由图我们很明显看到,值为“a”变为了True,然后再用这组布尔索引得要我们要的值