Pandas索引操作及高級索引——reindex()方法

文章目錄

  • 索引對象
    • 多個數據結構之間共享index類對象
      • is與==的區別
    • 重置索引——reindex()
  • 索引操作
    • Series的索引操作
      • 切片
      • 不連續索引
      • 布爾型索引
    • DataFrame的索引操作
      • 獲取不連續的Series對象
      • 切片
  • Pandas庫中的操作索引方法


索引對象

Index類對象,該對象不可以進行修改(不可變性),以保證數據的安全。


多個數據結構之間共享index類對象

基于Index類對象的不可變性,實現兩個以上數據結構共享一個索引

import pandas as pd
import numpy as npser_obj1 = pd.Series(range(3), index=['a', 'b', 'c'])
ser_obj2 = pd.Series(['a', 'b', 'c'], index=ser_obj1.index)
print(ser_obj2.index is ser_obj1.index)
print(ser_obj1)
print(ser_obj2)

輸出結果:

Truea    0
b    1
c    2
dtype: int64a    a
b    b
c    c
dtype: object

is與==的區別

is比較的是兩個對象的地址值,也就是說兩個對象是否為同一個實例對象;而==比較的是對象的值是否相等。


重置索引——reindex()

該方法的作用時對原索引和新索引進行匹配,新索引含有原索引的數據,而原索引數據按照新索引排序。

語法格式:

DataFrame.reindex(labels = None, index = None, columns = None, axis = None, method = None,
copy = None, level = None, fill_value = nan, limit = None, tolerance = None)

上述方法的部分參數含義如下:

index:用作索引的新序列

method:插值填充方式

fill_value:引入缺失值時使用的替代值

limit:前向或者后向填充時的最大填充量

如果新索引中沒有原索引的數據,那么將新添加的索引的值填充為NaN。

ser_obj5 = pd.Series(range(1, 6, 1), index=['c', 'd', 'a', 'b', 'e'])
print("ser_obj5", ser_obj5)
ser_obj6 = ser_obj5.reindex(['a', 'b', 'c', 'd', 'e', 'f'])
print("ser_obj6", ser_obj6)

輸出結果:

ser_obj5 
c    1
d    2
a    3
b    4
e    5
dtype: int64ser_obj6 
a    3.0
b    4.0
c    1.0
d    2.0
e    5.0
f    NaN
dtype: float64

如果不想填充為NaN,則可使用fill_value參數來指定缺失值。

ser_obj7 = ser_obj5.reindex(['a', 'b', 'c', 'd', 'e', 'f'], fill_value=6)
print("ser_obj7", ser_obj7)

輸出結果:

ser_obj7 
a    3
b    4
c    1
d    2
e    5
f    6
dtype: int64

fill_value參數會讓所有的缺失值都填充為同一個值。

如果期望使用相鄰的元素值(上或下一個元素的值)進行填充,則可使用method參數。

參數說明
ffill 或 pad前向填充值
bfill 或 backfill后向填充值
nearest從最近的索引值填充(先后再前)
ser_obj3 = pd.Series([1, 3, 5, 7], index=[0, 2, 3, 6])
print("ser_obj3", ser_obj3)
ser_obj4 = ser_obj3.reindex(range(7), method="nearest")
print("ser_obj4", ser_obj4)

輸出結果:

ser_obj3 
0    1
2    3
3    5
6    7
dtype: int64ser_obj4 
0    1
1    3
2    3
3    5
4    5
5    7
6    7
dtype: int64

索引操作

Series的索引操作

兩種索引方式:

print("ser_obj1[2]:", ser_obj1[2])  # 使用索引位置獲得數據
print("ser_obj1['c']:", ser_obj1['c'])  # 使用索引名稱獲取數據

ser_obj1

a 0
b 1
c 2
dtype: int64


輸出結果:

ser_obj1[2]: 2
ser_obj1['c']: 2

切片

位置索引進行切片,切片結果包含起始位置不包括結束位置(前閉后開)

索引名稱進行切片,切片結果包含起始位置包括結束位置(前閉后閉)

print("ser_obj5[2:4]:\n", ser_obj5[2:4])  # 使用位置索引進行切片
print("ser_obj7['b':'d']:\n", ser_obj7['b':'d'])  # 使用索引名稱進行切片

ser_obj5

c 1
d 2
a 3
b 4
e 5
dtype: int64

ser_obj7

a 3
b 4
c 1
d 2
e 5
f 6
dtype: int64

輸出結果:

ser_obj5[2:4]:a    3
b    4
dtype: int64ser_obj7['b':'d']:b    4
c    1
d    2
dtype: int64

不連續索引

print("ser_obj5[[0, 2, 4]]:\n", ser_obj5[[0, 2, 4]])  # 通過不連續位置索引獲取數據集
print("ser_obj7[['a', 'c', 'e']]:\n", ser_obj7[['a', 'c', 'e']])  # 通過不連續索引名稱獲取數據集

輸出結果:

ser_obj5[[0, 2, 4]]:c    1
a    3
e    5
dtype: int64
ser_obj7[['a', 'c', 'e']]:a    3
c    1
e    5
dtype: int64

布爾型索引

將布爾型的數組索引作為模板篩選數據,返回與模板中True位置對應的元素

ser_bool = ser_obj7 > 2  # 創建布爾型Series對象
print("ser_bool:\n", ser_bool)
print("ser_obj7[ser_bool]:\n", ser_obj7[ser_bool])  # 獲取結果為True的數據

輸出結果:

ser_bool:a     True
b     True
c    False
d    False
e     True
f     True
dtype: boolser_obj7[ser_bool]:a    3
b    4
e    5
f    6
dtype: int64

DataFrame的索引操作

DataFrame中每列的數據都是一個Series對象,可以使用列索引獲取

arr1 = np.arange(12).reshape(3, 4)
df_obj1 = pd.DataFrame(arr1, columns=['a', 'b', 'c', 'd'])
# 創建DataFrame對象,并為其指定列索引
print("df_obj1:\n", df_obj1)
print("df_obj1['b']:\n", df_obj1['b'])  # 獲取b列的數據

輸出結果:

df_obj1:a  b   c   d
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11df_obj1['b']:0    1
1    5
2    9
Name: b, dtype: int32

獲取不連續的Series對象

print("df_obj1[['b', 'd']]:\n", df_obj1[['b', 'd']])

輸出結果:

df_obj1[['b', 'd']]:b   d
0  1   3
1  5   7
2  9  11

切片

print("df_obj1[:2]:\n", df_obj1[:2])  # 使用切片獲取第0~1行的數據
print("df_obj1[:3][['b', 'd']]:\n", df_obj1[:3][['b', 'd']])
# 使用切片先通過行索引獲取0~2行的數據,再通過不連續列索引獲取b、d列的數據

輸出結果:

df_obj1[:2]:a  b  c  d
0  0  1  2  3
1  4  5  6  7df_obj1[:3][['b', 'd']]:b   d
0  1   3
1  5   7
2  9  11

Pandas庫中的操作索引方法

loc:基于標簽索引(索引名稱,如:a、b等),用于按標簽選取數據。當執行切片操作時,既包含起始索引,也包含結束索引。(前閉后閉)

iloc:基于位置索引(整數索引,如:0~length-1),用于按位置選取數據。當執行切片操作時,只包含起始索引,不包含結束索引。(前閉后開)

iloc方法主要使用整數來索引數據,而不能使用字符標簽來索引數據。

loc方法只能使用字符標簽來索引數據,而不能使用整數來索引數據。不過,當DataFrame對象的行索引或者列索引使用的是整數時,則其就可以使用整數來索引。

print("df_obj1.loc[:, [“d”, “b”]]:\n", df_obj1.loc[:, ["d", "b"]])
print("df_obj1.iloc[:, 3, 1]:\n", df_obj1.iloc[:, [3, 1]])

輸出結果:

df_obj1.loc[:, [“d”, “b”]]d  b
0   3  1
1   7  5
2  11  9df_obj1.iloc[:, 3, 1]:d  b
0   3  1
1   7  5
2  11  9

花式索引【數組索引】

print("df_obj1.loc[:1, [“c”, “a”]]:\n", df_obj1.loc[0:1, ["c", "a"]])
print("df_obj1.iloc[:2, [2, 0]]:\n", df_obj1.iloc[0:2, [2, 0]])

輸出結果:

df_obj1.loc[:1, [“c”, “a”]]:c  a
0  2  0
1  6  4df_obj1.iloc[:2, [2, 0]]:c  a
0  2  0
1  6  4

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【精品計劃1】動態規劃入門到熟悉,看不懂來打我啊

持續更新。。。。。。 2.1斐波那契系列問題 2.2矩陣系列問題 2.3跳躍系列問題 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些變形選講 2.1斐波那契系列問題 在數學上,斐波納契數列以如下被以遞歸的方法定義:F(0)0,F(1)1, F(n)F(n-1)…

Pandas數據排序——【按索引排序sort_index()方法、按值排序sort_value()方法】

文章目錄按索引排序——sort_index()對Series排序對DataFrame排序按值排序——sort_value()對Series進行排序對DataFrame進行排序按索引排序——sort_index() sort_index(axis0, levelNone, ascendingTrue, inplaceFalse, kind‘quicksort’, na_position‘last’,sort_remaini…

【大總結2】大學兩年,寫了這篇幾十萬字的干貨總結

本文是我大學兩年知識的總結。涵蓋數據結構、算法、語言基礎、操作系統、關系數據庫、NOSQL、網絡/前端/項目基礎知識、安全和測試、框架的學習、中間件和工具、設計模式和框架原理、我推薦的資料、我的建議 本篇文章應該算是Java后端開發技術棧的,但是大部分是基礎…

Pandas對象的層次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目錄層次化索引的概念層次化索引的創建使用嵌套列表的方式構造層次化索引對象Series對象DataFrame對象通過MultiIndex類的方法構建層次化索引通過from_tuples()方法創建MultiIndex對象通過from_arrays()方法創建MultiIndex對象通過from_product()方法創建MultiIndex對象層次…

《這是全網最硬核redis總結,誰贊成,誰反對?》六萬字大合集

我攤牌了,這篇文章,值得99%的人收藏 此文后續會改為粉絲可見,所以喜歡的請提前關注和收藏,不迷路。 最近有五本我喜歡的redis實體新書,想要的去評論,我寫個隨機數抽獎包郵送給你。 那么,準備好…

Python數據預處理之異常值的處理——【自定義的three_sigma()函數、boxplot()方法】

文章目錄基于3σ原則檢測異常值代碼實現測試基于箱型圖檢測異常值異常值的處理基于3σ原則檢測異常值 3σ原則,又稱拉依達準則。是指假設一組檢測數據只含有隨機誤差。對其進行計算處理得到標準偏差,按一定概率確定一個區間,凡是超過這個區間…

那個谷歌的網紅扔雞蛋的題,來看看教科書式的回答

leetcode頂級難題,谷歌面試天天問,來看看吧,帶你來一步一步達到最優解。 谷歌不知道問了多少遍,藍橋杯也出現過,leetcode上是頂級難題,到底是什么題能如此頻繁地出現?我們一探究竟吧。 原題描述…

Python更改數據類型——astype()方法和to_numeric()函數

文章目錄明確指定數據的類型通過dtypes屬性進行查看創建Pandas對象指定數據類型轉換數據類型通過astype()方法強制轉換數據的類型通過to_numeric()函數轉換數據類型明確指定數據的類型 通過dtypes屬性進行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不騙你,沒讀這一篇,你不可能懂二分

上篇文章講動態規劃獲得了80k瀏覽,這次的二分也值得你們一看,這個系列是特別用心寫的,準備出書的哦 動態規劃 3.0 引子 圖書館自習的時候,一女生背著一堆書進閱覽室,結果警報響了,大媽讓女生看是哪本書把警報弄響了,女生把書倒出…

Python之數據合并——【concat()函數、merge()函數、join()方法、combine_first()方法】

文章目錄軸向堆疊數據——concat()函數橫向堆疊與外連接縱向堆疊與內連接主鍵合并數據——merge()函數內連接方式外連接方式左連接方式右連接方式其他根據行索引合并數據——join()方法四種連接方式行索引與列索引重疊合并重疊數據——combine_first()方法軸向堆疊數據——conc…

超硬核!操作系統學霸筆記,考試復習面試全靠它

之后會發布基于基礎知識的大部分算法的模擬代碼合集,敬請關注。 進程基礎 進程的基本概念 程序順序執行的特征: 1)順序性:處理機嚴格按照程序所規定的順序執行,每一步操作必須在下一步操作開始前執行 2)封…

配置tomcat6.0的HTTPS(單向)

利用JDK自帶的產生證書的工具 生成證書 建立一個腳本文件,內容如下: set SERVER_DN"CNServer, OUshare, Oshare, Lsz, Sgd, CCN" set CLIENT_DN"CNClient, OUshare, Oshare, Lsz, Sgd, CCN" set KS_PASS-storepass changeit set KE…

Python之數據重塑——【stack()方法和unstack()方法、pivot()方法】

文章目錄重塑層次化索引對于單層索引的DataFrame類對象stack()方法unstack()方法對于多層索引的DataFrame類對象辨析操作內層索引與外層索引的區別查看多層索引對象轉換后的類型軸向旋轉——pivot()方法重塑層次化索引 Pandas中重塑層次化索引的操作主要是stack()方法和unstac…

超硬核!學霸把操作系統經典算法給敲完了!要知行合一

上期的筆記,瀏覽快1萬了,既然關注的人很多,那就發出來承諾過的算法全模擬,希望幫到你們。 上期的操作系統學霸筆記,考試復習面試全靠它 一、模擬進程調度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

Python之數據轉換——【rename()方法、cut()函數、get_dummies()函數】

文章目錄重命名軸索引離散化連續數據啞變量處理類別型數據重命名軸索引 rename( self, mapper: Optional[Renamer] None, *, index: Optional[Renamer] None, columns: Optional[Renamer] None, axis: Optional[Axis] None, copy: bool True, inplace: bool False, level…

超硬核!數據結構學霸筆記,考試面試吹牛就靠它

上次發操作系統筆記,很快瀏覽上萬,這次數據結構比上次硬核的多哦,同樣的會發超硬核代碼,關注吧。 超硬核!操作系統學霸筆記,考試復習面試全靠它 第一次筆記(復習c,課程概述&#xff…

Python之數據拆分——groupby()方法

文章目錄groupby()方法通過列名進行分組通過Series對象進行分組Series對象與原數據的行索引長度相等Series對象與原數據的行索引長度不等通過字典進行分組按照columns軸的方向進行分組按照index軸的方向進行分組通過函數進行分組groupby()方法 groupby( self, byNone, axis0, l…

超硬核!小白讀了這篇文章,就能在算法圈混了

作為一只超級硬核的兔子,從來不給你說廢話,只有最有用的干貨!這些神級算法送給你 目錄 第一節 1.1bogo排序 1.2位運算 1.3打擂臺 1.4morris遍歷 第二節 2.1睡眠排序 2.2會死的兔子 2.3矩陣快速冪 2.4摔手機/摔雞蛋 時空復雜度目錄 …

Python之數據聚合——aggregate()方法

文章目錄使用內置統計方法聚合數據面向列的聚合方法aggregate()方法對每一列數據應用同一個函數對某列數據應用不同的函數對不同列數據應用不同函數使用內置統計方法聚合數據 實現數據拆分成組并分別計算平均數的操作 代碼: import pandas as pd import numpy as…

超硬核十萬字!全網最全 數據結構 代碼,隨便秒殺老師/面試官,我說的

本文代碼實現基本按照《數據結構》課本目錄順序,外加大量的復雜算法實現,一篇文章足夠。能換你一個收藏了吧? 當然如果落下什么了歡迎大家評論指出 目錄 順序存儲線性表實現 單鏈表不帶頭標準c語言實現 單鏈表不帶頭壓縮c語言實現 約瑟…