一. 索引详解

标签索引与位置索引

如果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]

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

会出错

series中如何找到符合条件的第一个值 series根据值找索引_CRUD操作


提供index a

series中如何找到符合条件的第一个值 series根据值找索引_切片_02


这时候可以了吗?

series中如何找到符合条件的第一个值 series根据值找索引_索引_03


原因在于index到底是数值类型还是非数值类型。

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

所以,不建议。

series中如何找到符合条件的第一个值 series根据值找索引_切片_04

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

通过

Loc 位置 Iloc 标签

混淆:标签和位置 都能访问。

希望能有一致性,Loc 只能标签索引。

series中如何找到符合条件的第一个值 series根据值找索引_切片_05

Loc 如果位置索引,会报错。

series中如何找到符合条件的第一个值 series根据值找索引_切片_06


Loc仅能通过标签索引。

s.iloc只能位置,标签就会报错。

series中如何找到符合条件的第一个值 series根据值找索引_python数据科学_07


负值也支持。

series中如何找到符合条件的第一个值 series根据值找索引_索引_08

老代码 s.ix,

还有,老代码 s.ix,

警告信息: 不建议使用。

series中如何找到符合条件的第一个值 series根据值找索引_CRUD操作_09


标签数组索引,基于标签进行访问

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

通过标签进行访问

series中如何找到符合条件的第一个值 series根据值找索引_切片_10


series中如何找到符合条件的第一个值 series根据值找索引_索引_11

通过位置来访问,也支持

series中如何找到符合条件的第一个值 series根据值找索引_series类型的对象_12

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

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)
布尔数组索引

返回布尔

series中如何找到符合条件的第一个值 series根据值找索引_CRUD操作_13


返回过滤结果

series中如何找到符合条件的第一个值 series根据值找索引_series类型的对象_14


类数组对象就可以,并非一定是要严格ndarray。

修改值

索引获取,返回拷贝

series中如何找到符合条件的第一个值 series根据值找索引_CRUD操作_15

二. 切片详解

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

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

能是能,

series中如何找到符合条件的第一个值 series根据值找索引_索引_16


但是有歧义,既可以通过标签,也可以通过位置。

位置索引 起包 终 不包

标签索引 起 终 都包含

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中如何找到符合条件的第一个值 series根据值找索引_索引_17

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

series中如何找到符合条件的第一个值 series根据值找索引_索引_18

三. 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

series中如何找到符合条件的第一个值 series根据值找索引_索引_19

# 删除索引-值。
# 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)

删除操作

series中如何找到符合条件的第一个值 series根据值找索引_索引_20


不去用,因为这是字典的方式。

如何去用?

s.drop()方法 传索引

series中如何找到符合条件的第一个值 series根据值找索引_切片_21


传一个数组,删除多个。

series中如何找到符合条件的第一个值 series根据值找索引_切片_22


想把s打印一下,有没有真的删除?

series中如何找到符合条件的第一个值 series根据值找索引_索引_23


没有成功,s.drop一大堆,返回的都是新创建的对象,

如果想让它修改,还是得赋值回来。

series中如何找到符合条件的第一个值 series根据值找索引_CRUD操作_24


在原有对象上修改,

如果不想赋值呢?想再原有对象上修改,怎么办?

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

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

修改成功了。

series中如何找到符合条件的第一个值 series根据值找索引_series类型的对象_25


series中如何找到符合条件的第一个值 series根据值找索引_python数据科学_26


返回值没有 是none,Print就有 none。

Jn中 b会把a盖掉

series中如何找到符合条件的第一个值 series根据值找索引_索引_27

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

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

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

False没有进行就地修改,如果又没有返回值 就没有意义

series中如何找到符合条件的第一个值 series根据值找索引_索引_28


Pandas里面提供的方法,只要涉及到inplace,就是这个思想。

series中如何找到符合条件的第一个值 series根据值找索引_CRUD操作_29