各位同学好,今天我和大家分享一下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'])

python数据框修改行索引 pandas修改行索引_数据挖掘


1. 索引操作 -- 改

1.1 对 Series 修改

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

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

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

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

python数据框修改行索引 pandas修改行索引_数据分析_02


1.2 对 DataFrame 修改

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

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

python数据框修改行索引 pandas修改行索引_pandas_03

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

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

python数据框修改行索引 pandas修改行索引_数据挖掘_04

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

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

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

python数据框修改行索引 pandas修改行索引_python_05


2. 索引操作 -- 查

2.1 对 Series 操作

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

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

python数据框修改行索引 pandas修改行索引_pandas_06

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

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

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

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

python数据框修改行索引 pandas修改行索引_python数据框修改行索引_07

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

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

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

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

python数据框修改行索引 pandas修改行索引_数据分析_08

(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的值

python数据框修改行索引 pandas修改行索引_数据分析_09


2.2 对 DataFrame 操作

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

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

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

python数据框修改行索引 pandas修改行索引_数据分析_10

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

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

python数据框修改行索引 pandas修改行索引_python_11

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

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

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

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

python数据框修改行索引 pandas修改行索引_python数据框修改行索引_12


3. 高级索引

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

(1)对 series 操作

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

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

两种写法得到的结果相同

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

python数据框修改行索引 pandas修改行索引_python_13

(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'列的数据

python数据框修改行索引 pandas修改行索引_pandas_14


3.2  iloc 位置索引

(1)对 Series 操作

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

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

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

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

python数据框修改行索引 pandas修改行索引_python数据框修改行索引_15

(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行的一块数据

python数据框修改行索引 pandas修改行索引_python数据框修改行索引_16