【详解】Pandas入门之Series和DataFrame

本文介绍了Pandas库中的Series和DataFrame数据结构,包括它们的创建、属性访问、算数运算以及处理缺失值的方法。重点讲解了DataFrame的构建、索引操作,如布尔索引、重置索引,以及数据选择。此外,还涉及了描述统计函数的使用,如sum和unique。
摘要由CSDN通过智能技术生成

Pandas入门—Series和DataFrame

为了入门pandas,我们需要熟悉两个常用的工具数据结构:Series和DataFrame

Series:

1.Series创建:

​ Series是一种一维的数组型对象,它包含了值序列,并且也包含了数据标签,称之为索引(index)。是不是看不懂我在说什么,没关系接下来让我们看看具体的例子:

1.1用列表初始化
import pandas as pd

image-20230110100706548

这样我们就创建了一个Series对象

左边的一列从0到2,就是刚刚所得索引,对应的值就是列表[“a”,“b”,“c”]

我们可以通过data.index和data.values 来分别访问index和values

image-20230110100941155

image-20230110101015714

这里我们创建的Series是默认生成索引的,默认生成索引是从0到N-1,N为列表的长度

接下来让我们来看看指定索引的生成:

image-20230110101618904

1.2.用字典进行初始化

从另外一个角度来看Series,其实我们可以认为它是一个长度固定且有序的字典,因为它将索引值和数据按位置配对:

image-20230110102254822

2.Series的性质:

​ 前面我们就说了可以用.index和.values可以访问Series的索引和值这里我们就不再重复了

2.1访问Series的值

​ 前面我们说过可以用字典来构造Series,所以我们也可以用字典的形式来访问

image-20230110103921756

​ 我们也可以用data.loc[”a“]进行访问,关于loc,后面讲到DataFrame我们会学习到,这里就仅仅提一下

image-20230110105040835

2.2判断值是否在Series里面

直接用索引进行判断

image-20230110103324458

image-20230110103349789

2.3 Series的算数运算:

例如:

image-20230110110046030

很明显这里的data*4,就是data里面的每个值都乘了4,我们再看一个例子:

image-20230110110256799

这里的结果其实就是以e为底数,data的值为指数,算出来的结果

3.缺失值的产生:

对于缺失值,是我们学习pandas经常会遇到和需要处理的,这里仅仅说明几种为什么会出现缺失值的情况

缺失值pandas一般用NaN(not a number) 来表示

1.在创建Series时,我们用字典创建,并且指定了索引,但是我们指定的索引和字典里面的索引不一样,这样会导致值缺失。

例如:

image-20230110112525721

这里我们指定的索引 “上海”,“北京”,“湖南”,“海南”,而字典里面没有"湖南",“海南”,所以为缺失值,而“湖北” ,字典里面有,但索引里面没有,就被舍弃了

2.两个Series进行加减乘除的时候,因为这两个Series里面的索引可能不一样,也会导致出现缺失值

image-20230110113827146

我们拿“西瓜”和“香蕉”举例

西瓜 2.5元一斤,一个西瓜8斤,所以最后结果是20

而香蕉有价格5元一斤,但是没有斤两,所以最后结果是缺失的

DataFrame:

	DataFrame 和二维的Series很像,**DataFrame既有行索引也有列索引,它可以被视为一个共享相同索引的Series的字典**,在DataFrame中,数据被存储为一个以上的二维块,而不是列表,字典或者其他一维数组的集合

​ (虽然DataFrame是二维的,但是可以利用分层索引在DataFrame中展现更高维度的数据)

1.DataFrame的构建:

1.1利用包含等长度列表或者NumPy数组的字典来形成DataFrame:

字典中的键会作为列索引

例如:

image-20230110133647360

这里我指定了index,如果不指定的话,就会跟之前Series一样,默认分配索引

当然我们也可以指定列的排列顺序,比如,如果我们想让列的循序是 小美,小华,小明 。那么只需要改变column的参数即可

image-20230110134322097

当然注意:这个地方,如果我们指定的columns中 出现字典中不存在的键,也会出现缺失值 例如

image-20230110134932054

column中多了一个小东,所以小东的年龄,身高,体重都是缺失的

1.2利用包含字典的嵌套字典来构建DataFrame:

如果嵌套字典被赋值给DataFrame,pandas 会将字典的键作为列,将内部字典的键作为行索引

例如:

image-20230110140222617

这里最外面的键“小明”,”小美“,”小华“就作为了列向量,内部的键"年龄",”体重“,"身高"就作为了行向量

这里也可以使用转置操作(交换行和列)

image-20230110141030354

其实所谓的嵌套字典构造也不过就是初始化了行向量和列向量,可以在后面构造DataFrame时可以少传一个columns

1.3利用包含Series的字典构建DataFrame

这种方式构造其实和以上两种构造方式类似,无非就是用Series构造

2.DataFrame的索引操作【重要指数五颗星】

索引本身是不能修改的,但是索引对应的值可以修改

2.1布尔索引

​ 这一点和Numpy极为相似,可以筛选出符合我们条件的数据

image-20230110144746451

如图,这里我们得到了一组符合条件年龄大于18岁的一组布尔数据

再然后把这组布尔数据传回原来的data,就得到了符合条件的数据

image-20230110145014919

2.2重建索引:

reindex是pandas对象的重要方法,该方法用于创建一个符合新索引的新对象,这个方法Series和DataFrame都可以使用

这里我们就拿DataFrame来举例:

image-20230110150226849

由图我们很容易的看出行索引的顺序发生了改变,由于重新构建的索引多了一个“爱好”,所以为缺失值

reindex还有很多其他参数 例如 method,fill_value, limit,tolerance,level,copy。

这里我们就来研究研究method和fill_value

method有两种取值,’ffill‘ 为前向填充,'bfill’为后向填充

注意: reindex要填入method参数是,索引必须是可以排序的,递增或者递减,否则会报错

image-20230110153122817

由于我们重新生成的索引"a",“b”,“c”,“d”,“e”,而原来的行索引没有"b",“e”,本来应该为NAN的,但是我们填了method = “ffill”,他的作用是用前面一个最近的未被替换的值进行替换

比如”a“我们没有替换,而”b“是新加的,而b刚好在”a“的下面,所以b的值就用a的值来填充 。后面”e“的值一样的

而”method = bfill“就是用后面一个最近的未被替换的值进行替换

image-20230110154227958

这里的"c"是新添加的,而”d“是之前就有的,而”d“在”c“的后面,所以”c“的值就是用”d“的值去填充。而”e“它的后面没有值,所以为NAN

然后我们再来说说fill_value

fill_value比较好理解,就是出现缺失值的时候,填充什么,接着上面的例子,我们加一个fill_value = ”nna“,那么缺失值就会变为”nna“

image-20230110154905633

2.3使用loc和iloc选择数据

loc函数是用index来进行切片,iloc函数是整数来进行切片

例如: image-20230110161043895

loc[ , ] 逗号前面是对行进行索引,逗号后面是对列进行索引

loc里面切片用index

而iloc里面用整数进行索引

例如:

image-20230110161324755

这里需要注意用loc切片是包含结尾字母的,而用iloc切片是不包含最后数字结尾的

3.DataFrame的删除

DataFrame可以使用drop方法进行删除行或者列

image-20230110162838004

drop默认axis = 0,所以不显示的指定axis的值,就会删除行 ,如果指定axis=1的话,就可以删除列

image-20230110162958263

注意:drop返回的只一个新的对象,如果我们想要在原数据上进行修改那么还需要加一个参数 inplace = True

4.DataFrame与Dataframe之间的算数:

我们首先来看一种情况:

image-20230110163925996

image-20230110164000382

data1+data2由于内部的标签位置没有重叠,导致出现了缺失值,用add函数就可以避免这种情况:

image-20230110164523113

这里面的data[“d”,"E]之所以为缺失值,是因为原来的data1和data2都没有这个值,另外一个同理

处理add函数还有sub,div,floordiv,mul,pow函数分别代表-,/,//,*,**

5.函数的应用和映射:

其实就是利用apply函数,将DataFrame中的值传入到函数中进行计算

例如:

image-20230110165853398

这里就是把data的值传入到f中进行计算,axis=1指的是计算每一行。比如说第一行的最大值是3,最小值是0,所以差就是3

这里axis不指定的话,依然默认为0

6.排序与排名

如果是对索引进行排序的话用.sort_index()

image-20230110175453055

对值进行排序用.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 image-20230110183436220

以下很多方法,使用方式与sum类似,不类似别找我(狗头报命)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slOv4vtS-1673406509732)(null)]

这里演示以下describe函数

image-20230110193653649

7.2唯一性,计数和成员属性

当我们遇到很多值是重复的时候,可以用.unique(),它会返回唯一的值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J4a0cfoT-1673406509763)(null)]

可以用value_counts()得到相同值的数量

image-20230111090749340

isin执行向量化的成员属性检查,注意:isin要传入一个列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1lTqbM0J-1673406509655)(null)]

由图我们很明显看到,值为“a”变为了True,然后再用这组布尔索引得要我们要的值

image-20230111091527211

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值