Pandas 中的 LOC 與 ILOC:Pandas 中 LOC 和 ILOC 的區別

已發表: 2020-08-01

目錄

Pandas 中的 Loc 和 iloc

新 Python 開發人員混淆的一個常見原因是 loc 與 iloc。 它們看起來都非常相似並且執行相似的任務。 所以這可能會讓任何學生感到困惑。

如果您想找出 iloc 和 loc 之間的區別,那麼您來對地方了,因為在本文中,我們將詳細討論這個主題。 您會發現這些功能之間的主要區別是什麼,然後查看它們的實際操作以更好地理解這個概念。 查看我們的數據科學課程,了解更多關於 Pandas 的信息。

讓我們開始吧。

loc和iloc之間的區別

1. Python中的iloc

您可以在 Python 中使用 iloc 進行選擇。 它基於整數位置,可幫助您按位置進行選擇。 因此,如果您想查找索引為 5 的行,iloc 將向您顯示數據框的第五行,而不管其名稱或標籤如何。

這是 Python 中 iloc 的示例:

>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},

… {'a':100,'b':200,'c':300,'d':400},

… {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]

>>> df = pd.DataFrame(mydict)

>>> df

A B C D

0 1 2 3 4

1 100 200 300 400

2 1000 2000 3000 4000

我們將使用標量整數索引行。通過對上述數據幀使用 iloc 函數:

>>> 類型(df.iloc[0])

<class 'pandas.core.series.Series'>

>>> df.iloc[0]

一個 1

b 2

3

d 4

名稱:0,數據類型:int64

2. 定位於 Pandas

您可以在 Pandas 中使用 loc 通過標籤訪問多行和多列; 但是,您也可以將它與布爾數組一起使用。

如果您使用 loc 查找索引為 5 的行,您將不會得到第五行。 相反,您只會得到名稱為“5”的行。

以下是 Pandas 中 loc 的示例:

>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],

… index=['cobra', 'viper', 'sidewinder'],

… 列=['max_speed', 'shield'])

>>> df

max_speed 盾牌

眼鏡蛇 1 2

毒蛇 4 5

響尾蛇 7 8

上面是我們將從中提取行的表:

>>> df.loc['毒蛇']

最大速度 4

盾牌 5

名稱:毒蛇,數據類型:int64

loc vs iloc的詳細示例

即使我們使用這兩個函數進行選擇,最好還是討論一個詳細的例子來理解它們的區別。

在我們的示例中,我們將使用 kaggle 上提供的電信客戶數據集。 我們將其添加到數據框中:

df = pd.read_csv(“項目/churn_prediction/Telco-Customer-Churn.csv”)

df.head()

ID 性別公民先生夥伴家屬任期電話多行互聯網安全
0 7590-VHVEG 女性0 是的1 沒有電話DSL
1 5575-GNVDE 男性0 34 是的DSL 是的
2 3668-QPYBK 男性0 2 是的DSL 是的

該數據集有 21 列; 我們只展示了一些用於演示目的。 正如我們已經討論過的,我們使用 loc 按標籤選擇數據。 這裡,列的名稱是它們的列標籤,例如性別、任期、OnlineSecurity; 它們都是列名和標籤。

由於我們沒有分配任何特定的索引,pandas 默認會為行創建一個整數索引。 行標籤是整數,從 0 開始向上。 在這個例子中,我們將看到 loc 和 iloc 的行為有何不同。

  • 選擇“1”行和“合作夥伴”列

df.loc[1, '合作夥伴']

輸出:“不”

它顯示了“1”行的“合作夥伴”列中的值。

  • 選擇行標籤“4”和列“customerID”和“gender”

df.loc[:4, ['customerID', 'gender']]

客戶ID

性別

0

7590-VHVEG

女性

1

5575-GNVDE

男性

2

3668-QPYBK

男性

3

7795-CFOCW

男性

4

9237-HQITU

女性

  • 選擇行標籤“1”、“2”、“3”和“Dependents”列

df.loc[[1,2,3], '家屬']

1 沒有

2 否

3 否

名稱:家屬,dtype:對象

這一次,我們將過濾數據幀並應用 iloc 或 loc:

  • 選擇具有合作夥伴的客戶的“10”、“PhoneService”和“InternetService”列的行標籤(合作夥伴應為“是”)

df [df.Partner == 'Yes'].loc:10, ['PhoneService', 'InternetService']]

在上面的例子中,我們對數據庫應用了一個過濾器,但沒有更改索引,因此我們的輸出省略了過濾器所需的行的多個標籤。 因此,通過在這裡使用 loc[:10],我們選擇了標籤最多為“10”的行。

另一方面,如果我們在這裡使用 iloc 並應用過濾器,我們將得到 10 行,因為 iloc 按位置選擇而與標籤無關。 如果我們應用 iloc[:10],我們會得到以下結果:

df[df.Partner == '是'].iloc[:10, [6,8]]

電話服務互聯網服務
0 DSL
8 是的光纖
10 是的DSL
12 是的光纖
15 是的光纖
18 是的DSL
21 是的
23 是的DSL
24 是的DSL
26 是的光纖

您一定已經註意到我們必須更改選擇列的方法。

閱讀: Python Pandas 教程

  • 使用 iloc 選擇前 5 列和前 5 行

df.iloc[:4, :4]

客戶ID 性別老年人夥伴
0 7590-VHVEG 女性0 是的
1 5575-GNVDE 男性0
2 3668-QPYBK 男性0
3 7795-CFOCW 男性0

我們可以使用 iloc 從末尾選擇位置。 為此,我們只需使用負整數(-1、-2 等)並從它們開始。

  • 選擇最後 5 列和最後 5 行

df.iloc[-5:, -5:]

無紙化計費付款方法月費總費用攪拌
7038 是的郵寄支票84.80 1990.5
7039 是的信用卡103.20 7362.9
7040 是的電子支票29.60 346.45
7041 是的郵寄支票74.40 306.6 是的
7042 是的銀行轉帳105.65 6844.5

您也可以將 lambda 函數與 iloc 一起使用。 (lambda 函數是 Python 中的一個小型匿名函數,它可以有一個表達式但可以有任意數量的參數)

  • 每隔三行選擇一次,直到第 15 行,僅顯示“互聯網服務”和“合作夥伴”列

df.iloc[ lambda x: (x.index x 3 == 0) & (x.index <= 150]['Partner', 'InternetService' ]]

夥伴互聯網服務
0 是的DSL
3 DSL
6 光纖
9 DSL
12 是的光纖
15 是的光纖

我們還可以選擇介於兩者之間的標籤或位置。

  • 選擇 4 到 6 之間的列位置,以及 20 到 25 之間的行位置

df.iloc[20:25, 4:6]

家屬任期
20 1
21 12
22 1
23 58
24 49

現在,如果您嘗試將標籤傳遞給 iloc,Pandas 將向您顯示以下錯誤消息:

ValueError:基於位置的索引只能有 [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] 類型

如果您將位置傳遞給 loc,您將收到類似的錯誤。

另請閱讀:熊貓面試問題

了解有關 Python 的更多信息

學生必須提出問題並找到答案。 我們希望本文能回答您關於 Pandas 中的 loc(或 Python 中的 iloc)的問題。 如果您自己在不同的數據集上嘗試這些函數以了解它們的工作原理,那將是最好的。

如果您想了解有關 Python、Pandas 和相關主題的更多信息,請訪問我們的博客。 我們的專家在那裡添加了多個詳細資源。

如果您想了解數據科學,請查看 IIIT-B 和 upGrad 的數據科學執行 PG 計劃,該計劃是為在職專業人士創建的,提供 10 多個案例研究和項目、實用的實踐研討會、行業專家的指導、1與行業導師一對一,400 多個小時的學習和頂級公司的工作協助。

我們如何添加 Pandas DataFrame 的行?

要在 DataFrame 中插入行,我們可以使用 loc、iloc 和 ix 命令。

1. loc主要用於我們索引的標籤。 可以理解為當我們在 loc 4 中插入時,表示我們正在尋找索引為 4 的 DataFrame 條目。
2. iloc 多用於在索引中查找位置。 就好像我們在 iloc 4 中插入,這表明我們正在搜索索引 4 中存在的 DataFrame 條目。
3. ix 的情況很複雜,因為如果索引是基於整數的,我們將標籤傳遞給 ix。 ix 4 表示我們正在 DataFrame 中搜索索引為 4 的值。

什麼是 Python 中 Pandas 上下文中的重新索引?

當我們重新索引時,DataFrame 的行和列標籤會發生變化。 術語“重新索引”是指將數據與沿單個軸的一組特定標籤對齊的過程。 在 Pandas 中,重新索引可用於更改 DataFrame 的行和列的索引。 與許多 pandas 系列或 pandas DataFrame 連接的許多索引數據結構都可以與索引一起使用。

Pandas 中有哪些數據操作?

Pandas中DataFrame有幾個重要的數據操作,具體如下:

1. 行列的選擇——通過傳遞行列的名稱,我們可以選擇DataFrame中的任意行列。 它變成一維的,當您從 DataFrame 中選擇它時,它被視為一個系列。
2. 數據過濾——通過使用DataFrame中的一些布爾表達式,我們可以過濾數據。
3. Null 值 - 當沒有給項目提供數據時,它們會收到 Null 值。 不同列中不能有值,一般表示為 NaN。