【Pandas库】(6) 索引操作--改、查、高级索引

各位同学好,今天我和大家分享一下Pandas库的索引操作中的修改值、查找值、高级索引

首先,我们先定义两个变量ps1存放Series数据,pd1存放DataFrame数据,以便后续操作。
 

import pandas as pd
import numpy as np
ps1 = pd.Series(range(5),index=['a','b','c','d','e'])
pd1 = pd.DataFrame(np.arange(1,10).reshape(3,3),index=['a','b','c'],columns=['A','B','C'])


1. 索引操作 -- 改

1.1 对 Series 修改

利用标签索引修改: Series名[ 标签名 ] = 值

利用位置索引修改: Series名[ 位置数 ] = 值

# series修改
ps1['a'] = 999  #标签索引
ps1[1] = 888  #位置索引

将标签名'a'对应的值改成999,将位置索引1对应的值改为888。标签索引'a'对应的位置索引是0


1.2 对 DataFrame 修改

(1)利用标签索引修改一列数据: 变量名[ 列标签名 ] = 值/列表

#(1)利用索引修改一列的数据
pd1["A"] = 100
pd1["B"] = [9,99,999]
pd1["F"] = [8,8,8]    #索引名不存在,增加一列

(2)利用对象修改一列数据: 变量名.列标签名 = 值/列表

#(2)利用对象修改一列的数据  变量名.索引 = [数据]
pd1.A = 0
pd1.C = [1,11,111]

(3)利用高级索引修改一行数据: 变量名.loc[ 行标签名 ] = 值/列表

(4)利用高级索引修改某一个数据:变量名.loc[ 行标签名, 列标签名 ] = 值

#(3)loc 标签索引 
# 修改一行
pd1.loc['a'] = 777  # a索引对应的一行都变成777
#(4)修改单个数据 某行某列
pd1.loc['a','A'] = 1000


2. 索引操作 -- 查

2.1 对 Series 操作

(1)利用标签索引、位置索引查某个值: Series名[ 标签名 / 位置索引 ]

a1 = ps1['a']  #标签索引查值
a2 = ps1[0]    #位置索引查值

(2)利用切片索引查一块值: 

        标签索引切片,顾头顾尾: Series名[ 标签名1 : 标签名2 ]

        位置索引切片,顾头不顾尾: Series名[ 位置索引1 : 位置索引2 ]

# 切片索引
a3 = ps1['b':'d']  #标签切片,顾头顾尾
a4 = ps1[1:4]  #位置切片,顾头不顾尾

 (3)利用不连续索引查多个值:

        使用标签索引: 变量名[[ 标签名1 , 标签名2 ]]     

        使用位置索引: 变量名[[ 位置索引1 , 位置索引2 ]]

# 不连续索引
a5 = ps1[['b','e']]  #标签索引,两个中括号,代表取的是b这一行和e这一行,是不连续的
a6 = ps1[[0,2,3]]  #位置索引

(4) 利用布尔索引取满足条件的值: 变量名[ 条件 ]

满足条件则为True,输出满足条件的值,如下式条件ps1>2。ps1中的值有0、1、2、3、4。其中对于ps>1这个条件。0,1,2都是False;3,4是True。因此输出的是3、4。

# 布尔索引
a7 = ps1[ps1>2]  #取出ps1中所有大于2的值


2.2 对 DataFrame 操作

(1)利用标签索引查某一列变量名[ 标签名 ]       

(2)利用标签索引查多列:    变量名[[ 标签名1 , 标签名2 ]]

# 只能用标签索引操作,不能用位置索引
a8 = pd1["A"]  #标签索引,输出一列,返回series类型
a9 = pd1[["A","C"]]  #不连续索引取多列

(3)利用标签索引取某一个值 变量名[ 列索引名 ][ 行索引名 ]

# 选取一个值
a10 = pd1['A']['a']

(4)利用切片索引查连续几行数据:

        位置索引切片,顾头不顾尾: 变量名[ 位置索引1 : 位置索引2 ]

        标签索引切片,顾头顾尾: 变量名[ 标签名1 : 标签名2 ]

# 切片处理,获取的是行
a11 = pd1[:2]  # 顾头不顾尾,获取前两行
a12 = pd1['a':'c']  # 顾头顾尾


3. 高级索引

3.1  loc 标签索引 --- 基于标签名的索引

(1)对 series 操作

        利用标签索引切片: Series名[ 标签名1 : 标签名2 ]

        利用高级索引切片: Series名.loc[ 标签名1 : 标签名2 ]

两种写法得到的结果相同

# 切片操作
a12 = ps1['a':'c']
a13 = ps1.loc['a':'c']

(2)对 DataFrame 操作

        利用高级索引进行切片操作:

        获取第几行第几列的某个值 变量名.loc[ 行索引名 , 列索引名 ]

        获取连续几行中某一列的数据: 变量名.loc[ 行索引名1 : 行索引名2 , 列索引名 ]

        获取指定的某几行某几列的一块区域的数据: 

        变量名.loc[ 行索引名1 : 行索引名2 , 列索引名1 : 列索引名2 ]

# frame名.loc[行索引,列索引]
a14 = pd1.loc['a','A']     #取出第a行第A列的数
a15 = pd1.loc['a':'b','A']   #取出'a'到'b'行中第'A'列的数据
a16 = pd1.loc['a':'b','A':'C']  #取出'a'到'b'行中第'A'到'C'列的数据


3.2  iloc 位置索引

(1)对 Series 操作

        利用位置索引切片: Series名[ 位置索引1 : 位置索引2 ]

        利用高级索引切片: Series名.iloc[ 位置索引1 : 位置索引2 ]

位置索引切片顾头不顾尾,两种切片方法结果相同

# 对series操作
a17 = ps1[1:3]  #位置切片,顾头不顾尾
a18 = ps1.iloc[1:3]

(2)对 DataFrame 操作

        列用高级索引进行切片操作:

        获取第几行第几列的某个值 变量名.iloc[ 行位置索引 , 列位置索引 ]

        获取连续几行中某一列的数据: 变量名.iloc[ 行位置1 : 行位置2 , 列位置 ]

        获取指定的某几行某几列的一块区域的数据: 

        变量名.iloc[ 行位置1 : 行位置2 , 列位置1 : 列位置2 ]

位置索引顾头不顾尾

# frame名.iloc[行索引,列索引]   顾头不顾尾
a19 = pd1.iloc[0,2]   # 获取第0行第2列的值
a20 = pd1.iloc[0:2,2]   # 获取第0到1行中第2列的值
a21 = pd1.iloc[0:2,1:3]  # 获取第0到1行中第1到2行的一块数据

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立Sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值