Pandas - Series 类型的对象 - 4. 索引,切片和CRUD操作

版权声明:转载请注明来源及作者,谢谢! https://blog.csdn.net/qq_42442369/article/details/86484927

一. 索引详解

标签索引与位置索引

如果Series对象的index值为非数值类型,通过[索引]访问元素,索引既可以是标签索引,也可以是位置索引。这会在一定程度上造成混淆。我们可以通过:

  • loc 仅通过标签索引访问。
  • iloc 仅通过位置索引访问。

这样,就可以更加具有针对性去访问元素。

整数数组索引与布尔数组索引

Series也支持使用整数数组与布尔数组进行索引。与Numpy数组相同,二者返回的是原数组数据的拷贝(复制)。
说明:

  • 与ndarray数组的整数索引不太相同,Series的整数数组索引,既可以是标签数组索引,也可以是位置数组索引。
# 当Series的索引(index)是数值类型时,此时,只能通过标签索引访问元素。
# 当Series的索引时非数值类型时,此时,既可以通过标签索引访问元素,也可以通过位置索引访问元素。
# 这会造成极大的混淆。因此,不建议使用s[索引]的方式访问元素。
# s = pd.Series([23, 12, 33], index=[5, 6, 7])
s = pd.Series([23, 12, 33], index=["a", "b", "c"])
# s["a"]
# s[-1]
# 建议:使用loc与iloc访问元素。
# loc 仅针对标签索引访问元素。
# iloc仅针对位置索引访问元素。
# s.loc["a"]
# 错误,loc仅能通过标签索引访问元素。
# s.loc[0]
# s.iloc[-1]
# 错误,iloc仅能通过位置索引访问元素。
# s.iloc["a"]

# s.ix与s[索引]的方式类似,表示先根据标签索引访问元素,如果找不到,再根据位置索引访问元素。
# s.ix 已经不建议使用。
# s.ix["a"], s.ix[-1]

特别注意,用的时候会有混淆

会出错
在这里插入图片描述
提供index a
在这里插入图片描述
这时候可以了吗?
在这里插入图片描述
原因在于index到底是数值类型还是非数值类型。

如果是非数值类型,
既可以通过标签索引来访问元素,也可以通过位置索引来访问元素。

所以,不建议。
在这里插入图片描述

更好的方法,区分开来 标签索引 位置索引。

通过

Loc 位置 Iloc 标签

混淆:标签和位置 都能访问。
希望能有一致性,Loc 只能标签索引。
在这里插入图片描述

Loc 如果位置索引,会报错。
在这里插入图片描述
Loc仅能通过标签索引。
s.iloc只能位置,标签就会报错。
在这里插入图片描述
负值也支持。
在这里插入图片描述

老代码 s.ix,

还有,老代码 s.ix,
警告信息: 不建议使用。
在这里插入图片描述
标签数组索引,基于标签进行访问
整数数组索引 布尔数组索引

通过标签进行访问

在这里插入图片描述
在这里插入图片描述

通过位置来访问,也支持

在这里插入图片描述

以上就是通过索引数组获取元素,必须是通过 标签索引。

s = pd.Series([23, 12, 33], index=["a", "b", "c"])
# 通过索引数组获取元素。
# s[["a", "b"]]
# s[[0, 2]]
# s[s > 12]
# 通过索引数组获取元素,返回的是原数组对象(Series)的拷贝。这点与ndarray相同。
s2 = s[["a", "b"]]
s.loc["a"] = 300
print(s)
print(s2)

布尔数组索引

返回布尔
在这里插入图片描述
返回过滤结果
在这里插入图片描述
类数组对象就可以,并非一定是要严格ndarray。

修改值

索引获取,返回拷贝
在这里插入图片描述

二. 切片详解

Series也支持切片访问一个区间的元素。与Numpy的数组相同,切片返回的是原数组数据的视图。

Series的切片与Numpy的ndarray数组对象切片是否存在不同?

能是能,
在这里插入图片描述
但是有歧义,既可以通过标签,也可以通过位置。
位置索引 起包 终 不包
标签索引 起 终 都包含

Ndarray永远基于位置索引访问

s = pd.Series([23, 12, 33], index=["a", "b", "c"])
# Series支持切片,不建议这样使用。建议使用loc与iloc。
# s[0:2]
# Series切片返回的是原Series对象的视图。一个对象修改了,将会另外一个对象造成影响。
# s2 = s.iloc[0:2]
# s.iloc[0] = 1000
# print(s)
# print(s2)

S修改之后,s2也改变
Series切片返回的时原series对象的视图,一个对象修改了,会对另外一个对象造成影响
在这里插入图片描述

# Series与ndarray都支持切片操作,但是,二者的切片行为是存在差异的。
# 对于ndarray,是基于位置进行切片的。(没有标签索引)
# 对于Series,既可以根据标签索引进行切片,也可以根据位置索引进行切片。
s = pd.Series([23, 12, 33], index=["a", "b", "c"])
# 包含起始点,不包含终止点。
# s.iloc[0:2]
# 包含起始点,也包含终止点。
s.loc["a":"c"]

在这里插入图片描述

三. Series的CRUD操作

Series索引-数值CRUD操作:

  • 获取值
  • 修改值
  • 增加索引-值
  • 删除索引-值
s = pd.Series([1, 2, 3], index=["a", "b", "c"])
# 获取值,建议使用loc与iloc。
# s.loc["a"]
# s.iloc[0]
# 修改值
# s.loc["a"] = 100
# s.iloc[-1] = 300
# Series类似于字典的存储方式,因此,增加索引-值的方式与字典也是相同的。
# 增加与修改的语法是相同的。增加还是修改,完全取决于索引在Series当中是否存在,如果存在,则是修改,
# 如果不存在,则是增加。
# s.loc["d"] = 400

获取值 loc iloc
在这里插入图片描述

# 删除索引-值。
# del s["a"]
# 参数指定要删除的标签。如果需要删除多个标签,可以传递一个数组。
# s.drop("a")
# s.drop(["a", "b"])
# s.drop默认会返回新的对象,没有在原有的对象上进行修改。如果我们希望在原有的对象上进行修改(就地修改),
# 可以设置inplace参数(默认为False),将其设置为True。
# s = s.drop("a")
# s.drop("a", inplace=True)
# print(s)
# 注意:inplace为True的时候,方法返回值为None。如果inplace为False,则方法会返回修改之后的结果。
# s.drop("a", inplace=False)

删除操作
在这里插入图片描述
不去用,因为这是字典的方式。
如何去用?

s.drop()方法 传索引

在这里插入图片描述
传一个数组,删除多个。
在这里插入图片描述
想把s打印一下,有没有真的删除?
在这里插入图片描述
没有成功,s.drop一大堆,返回的都是新创建的对象,
如果想让它修改,还是得赋值回来。
在这里插入图片描述
在原有对象上修改,
如果不想赋值呢?想再原有对象上修改,怎么办?

设置implace参数,设置为true,Inplace 出现频率很高。

每个人都有擅长点,我想做bitalent。

修改成功了。
在这里插入图片描述
在这里插入图片描述
返回值没有 是none,Print就有 none。
Jn中 b会把a盖掉
在这里插入图片描述

Li.sort()没有返回值,
就地修改,想要的结果调用li就可以了,
没有返回值是因为访问li就行了。

Sorted(li) 新的创键一个对象,li不变,
Sorted也没返回值,就没有意义了。

Inplace = true 对s对象本身的修改
输出s就行了,
可以通过s获得修改后的结果。

False没有进行就地修改,如果又没有返回值 就没有意义
在这里插入图片描述
Pandas里面提供的方法,只要涉及到inplace,就是这个思想。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42442369/article/details/86484927