pandas.DataFrame索引之 loc與iloc用法

pandas.DataFrame()的loc locloc與iloc ilociloc用法
pandas.DataFrame() pandas.DataFrame()pandas.DataFrame()實際上是一個二維矩陣,loc locloc與iloc ilociloc方法都是用於從pandas.DataFrame() pandas.DataFrame()pandas.DataFrame()中選取一些行,一些列,或者具體的某個位置的值,也可以間接的來改變DataFrame DataFrameDataFrame裏面的滿足條件的行,列,或具體位置的值,loc locloc與iloc ilociloc的區別就在於loc locloc是Selection by Label Selection\ by\ LabelSelection by Label (即通過標籤索引),而iloc ilociloc是Selection by Position Selection\ by\ PositionSelection by Position (即通過DataFrame DataFrameDataFrame的下標索引,DataFrame DataFrameDataFrame行列下標都是0,1,2... 0,1,2...0,1,2...)

函數原型
df.loc[row_indexer,column_indexer] df.loc[row\_indexer,column\_indexer]df.loc[row_indexer,column_indexer] (iloc ilociloc也一樣)
其中row_indexer row\_indexerrow_indexer與column_indexer column\_indexercolumn_indexer分別指行和列的索引方法,下文要講的就是各種各樣的索引方法,每種方法即可作爲row_indexer row\_indexerrow_indexer也可以作爲column_indexer column\_indexercolumn_indexer,所以可以自由組合(但是隻能loc locloc與loc locloc的方法組合,iloc ilociloc與iloc ilociloc的方法組合,不可交叉),在不指定column_indexer column\_indexercolumn_indexer的情況下默認全部選,但是如果不指定row_indexer row\_indexerrow_indexer的話需要這樣寫DataFrame.loc[:,column_indexer] DataFrame.loc[:,column\_indexer]DataFrame.loc[:,column_indexer]

pandas.DataFrame.loc pandas.DataFrame.locpandas.DataFrame.loc
loc locloc方法通過標籤或者bool數組選取一些行和列,首先構造一個DataFrame,作爲全文解析用的例子:

import pandas as pd
import numpy as np  #numpy後面要用到

df=pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
    ,columns=['Chinease','Math','English','Politics']
    ,index=['Bob','Cindy','Alice','QWQ'])
print(df)
1
2
3
4
5
6
7
也就是這樣的一個DataFrame:

Chinease    Math    English    Politics
Bob    1    2    3    4
Cindy    5    6    7    8
Alice    9    10    11    12
QWQ    13    14    15    16
loc locloc的幾種使用方法如下所述:

通過單個標籤選取一行或者一列,如 ‘Alice’
如選取Alice這一行:
print(df.loc['Alice'])   #返回值類型爲Series
1
輸出如圖:

當然也可以選取一列:
print(df.loc[:,'Math']) 
1
輸出如圖:

對應的修改某一行或者某一列的所有值的操作爲:
df.loc['Bob']=10 #修改Bob這一行的所有值爲10
df.loc[:,'English']=0 #修改English這一列的所有值爲0
df.loc['Bob','English']=0 #修改Bob同學的English成績爲0
1
2
3
剩下的方法對應的改值方法類似,故下面不再贅述
通過標籤的一個列表或者一個array來選取一些行
如選取Bob和Alice這兩行
print(df.loc[['Bob','Alice']])  #返回值類型爲DataFrame
1
運行結果:

也可以通過使用numpy.array來索引:
print(df.loc[np.array(['Bob','Alice'])])
1
運行結果與上圖一致
通過標籤的一個切片(slice) (slice)(slice)來選取一些連續的行,這裏需要注意兩點,第一這裏是標籤的切片,比如 ‘Bob’:‘Alice’ 這樣,第二就是這裏的切片有一點不同於python裏的普通切片:這裏的切片包含上界
比如選取從Bob到Alice之間的所有行:
print(df.loc['Bob':'Alice']) #返回值類型爲DataFrame
1
運行結果如圖:

通過一個與軸等長的bool boolbool數組選取一些行,這裏的數組實際上可以是list listlist或者numpy.array numpy.arraynumpy.array或者是值類型爲bool boolbool的Series SeriesSeries
比如選取 Bob, Alice, QWQ 這三行:
print(df.loc[[False,False,True,True]])  #list
print(df.loc[np.array([False,False,True,True])]) #numpy.array
print(df.loc[df['English']>8]) #語句df['English']>8返回的就是一個只爲布爾類型的Series
1
2
3
三種寫法效果相同:

上述四種方法可以兩兩組合來同時索引行和列
例如:
print(df.loc[df['English']>6,[True,False,True,True]]) #取English大於6的行與第0,2,3列的交集
1
輸出如下所示:

pandas.DataFrame.iloc pandas.DataFrame.ilocpandas.DataFrame.iloc
iloc ilociloc方法通過下標(即整數)訪問一些行或者列,只是把loc locloc方法中採用的標籤索引改成下表訪問了而已,方法與上述方法相同,故這裏只給出一些例子,讀者需要用的話可以自行運行測試

通過一個整數下標訪問:
df.iloc[0] #返回df的第0行,返回值類型爲Series
1
通過一個包含整數的list listlist訪問:
df.iloc[[0,2,3]] #返回df的第0,2,3行,返回值類型爲DataFrame
1
通過一個切片訪問,注意這裏的切片和不同的切片一樣,即不包含上界
df.iloc[1:3] #返回df的第1,2行,返回值類型爲DataFrame
1
通過一個與軸等長的布爾數組訪問
df.iloc[[True,False,True,True]] #返回df中第0,2,3行,返回值類型爲DataFrame
1
上述四種方式可以兩兩組合來同時索引行和列
例如:
print(df.iloc[0:3,[True,False,True,True]]) #選取第0,1,2行與0,2,3列的交集,返回值類型爲DataFrame
1
參考
官方文檔
————————————————
版權聲明:本文爲CSDN博主「wzw1105」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_40791842/article/details/103018201

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章