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。
