【Pandas库】(6) 索引操作--改、查、高级索引
生活随笔
收集整理的這篇文章主要介紹了
【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行的一塊數據
總結
以上是生活随笔為你收集整理的【Pandas库】(6) 索引操作--改、查、高级索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习入门】(5) 决策树算法实战:
- 下一篇: 【机器学习入门】(7) 线性回归算法:原