LOC กับ ILOC ใน Pandas: ความแตกต่างระหว่าง LOC และ ILOC ใน Pandas

เผยแพร่แล้ว: 2020-08-01

สารบัญ

Loc และ iloc ใน Pandas

สาเหตุทั่วไปของความสับสนในหมู่นักพัฒนา Python ใหม่คือ loc กับ iloc ทั้งคู่ดูคล้ายกันมากและทำงานคล้ายกัน ดังนั้นสิ่งนี้สามารถไขปริศนาของนักเรียนคนใดก็ได้

หากคุณต้องการทราบความแตกต่างระหว่าง iloc และ loc คุณมาถูกที่แล้ว เพราะในบทความนี้ เราจะพูดถึงรายละเอียดในหัวข้อนี้ คุณจะพบว่าอะไรคือข้อแตกต่างที่สำคัญระหว่างฟังก์ชันเหล่านี้ และเห็นการใช้งานจริงเพื่อทำความเข้าใจแนวคิดให้ดีขึ้น ชำระเงินหลักสูตรวิทยาศาสตร์ข้อมูลของเราเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับหมีแพนด้า

มาเริ่มกันเลย.

ความแตกต่างระหว่าง loc และ iloc

1. iloc ใน Python

คุณสามารถใช้ iloc ใน Python สำหรับการเลือก เป็นจำนวนเต็มตามตำแหน่งและช่วยให้คุณเลือกตามตำแหน่ง ดังนั้น หากคุณต้องการค้นหาแถวที่มีดัชนี 5 iloc จะแสดงแถวที่ห้าของ data frame โดยไม่คำนึงถึงชื่อหรือป้ายกำกับ

นี่คือตัวอย่างของ iloc ใน Python:

>>> 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

เอบีซีดี

0 1 2 3 4

1 100 200 300 400

2 1000 2000 3000 4000

เราจะสร้างดัชนีแถวด้วยจำนวนเต็มสเกลาร์โดยใช้ฟังก์ชัน iloc สำหรับดาต้าเฟรมด้านบน:

>>> พิมพ์ (df.iloc[0])

<คลาส 'pandas.core.series.Series'>

>>> df.iloc[0]

1

ข2

ค 3

d 4

ชื่อ: 0, dtype: int64

2. อยู่ใน Pandas

คุณสามารถใช้ loc ใน Pandas เพื่อเข้าถึงหลายแถวและหลายคอลัมน์โดยใช้ป้ายกำกับ อย่างไรก็ตาม คุณสามารถใช้กับอาร์เรย์บูลีนได้เช่นกัน

หากคุณใช้ loc เพื่อค้นหาแถวที่มีดัชนี 5 คุณจะไม่ได้แถวที่ห้าด้วย แต่คุณจะได้เฉพาะแถวที่มีชื่อ '5' เท่านั้น

นี่คือตัวอย่างของ loc ใน Pandas:

>>> 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['งูพิษ']

max_speed 4

โล่ 5

ชื่อ: ไวเปอร์, dtype: int64

ตัวอย่างโดยละเอียดสำหรับ loc กับ iloc

แม้ว่าเราจะใช้ฟังก์ชันทั้งสองนี้ในการเลือก แต่จะดีที่สุดถ้าเราพูดถึงตัวอย่างโดยละเอียดเพื่อทำความเข้าใจความแตกต่าง

ในตัวอย่างของเรา เราจะใช้ชุดข้อมูลลูกค้า telco ซึ่งมีอยู่ใน kaggle เราจะเพิ่มลงในกรอบข้อมูล:

df = pd.read_csv (“โครงการ/churn_prediction/Telco-Customer-Churn.csv”)

df.head ()

ไอดี เพศ พลเมืองอาวุโส พันธมิตร ผู้อยู่ในอุปการะ ดำรงตำแหน่ง โทรศัพท์ หลายบรรทัด อินเทอร์เน็ต ความปลอดภัย
0 7590-VHVEG หญิง 0 ใช่ ไม่ 1 ไม่ ไม่มีโทรศัพท์ DSL ไม่
1 5575-GNVDE ชาย 0 ไม่ ไม่ 34 ใช่ ไม่ DSL ใช่
2 3668-QPYBK ชาย 0 ไม่ ไม่ 2 ใช่ ไม่ DSL ใช่

ชุดข้อมูลนี้มี 21 คอลัมน์ เราได้แสดงเพียงบางส่วนเพื่อการสาธิตเท่านั้น ดังที่เราได้กล่าวไปแล้ว เราใช้ loc เพื่อเลือกข้อมูลตามป้ายกำกับ ในที่นี้ ชื่อของคอลัมน์คือป้ายชื่อคอลัมน์ เช่น เพศ, อายุ, OnlineSecurity; ทั้งหมดเป็นชื่อคอลัมน์และป้ายกำกับ

เนื่องจากเราไม่ได้กำหนดดัชนีเฉพาะใดๆ แพนด้าจะสร้างดัชนีจำนวนเต็มสำหรับแถวโดยค่าเริ่มต้น ป้ายชื่อแถวเป็นจำนวนเต็ม ซึ่งเริ่มต้นที่ 0 และขึ้นไป ในตัวอย่างนี้ เราจะเห็นว่า loc และ iloc ทำงานแตกต่างกันอย่างไร

  • เลือกแถว “1” และคอลัมน์ “พันธมิตร”

df.loc[1, 'พันธมิตร']

ผลลัพธ์: 'ไม่'

มันแสดงค่าที่มีอยู่ในคอลัมน์ 'Partner' ของแถว '1'

  • เลือกป้ายกำกับแถว '4' และคอลัมน์ 'รหัสลูกค้า' และ 'เพศ'

df.loc[:4, ['รหัสลูกค้า', 'เพศ']]

รหัสลูกค้า

เพศ

0

7590-VHVEG

หญิง

1

5575-GNVDE

ชาย

2

3668-QPYBK

ชาย

3

7795-CFOCW

ชาย

4

9237-HQITU

หญิง

  • เลือกแถวป้าย “1”, “2”, “3” และ “ขึ้นอยู่กับ” คอลัมน์

df.loc[[1,2,3], 'ขึ้นอยู่กับ']

1 ไม่ใช่

2 ไม่ใช่

3 ไม่ใช่

ชื่อ: อยู่ในความอุปการะ dtype: object

คราวนี้ เราจะกรอง dataframe และใช้ iloc หรือ loc:

  • เลือกป้ายกำกับแถวเป็น “10” และ “PhoneService” และ “InternetService” คอลัมน์ของลูกค้าที่มีพันธมิตร (พันธมิตรควรเป็น 'ใช่')

df [df.Partner == 'ใช่'].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

  • เลือก 5 คอลัมน์แรกและ 5 แถวแรกด้วย iloc

df.iloc[:4, :4]

รหัสลูกค้า เพศ พลเมืองอาวุโส พันธมิตร
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 ไม่

คุณสามารถใช้ฟังก์ชันแลมบ์ดากับ iloc ได้เช่นกัน (ฟังก์ชันแลมบ์ดาเป็นฟังก์ชันนิรนามขนาดเล็กใน Python ซึ่งสามารถมีนิพจน์เดียว แต่มีอาร์กิวเมนต์จำนวนเท่าใดก็ได้)

  • เลือกทุกแถวที่สามถึงแถวที่ 15 และแสดงเฉพาะคอลัมน์ "บริการอินเทอร์เน็ต" และ "พันธมิตร"

df.iloc[ แลมบ์ดา 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: การจัดทำดัชนีตามตำแหน่งสามารถมีได้เฉพาะประเภท [จำนวนเต็ม, สไลซ์จำนวนเต็ม (รวมจุดเริ่มต้น, จุดสิ้นสุดไม่รวม) ประเภทรายการของจำนวนเต็ม, อาร์เรย์บูลีน]

คุณจะได้รับข้อผิดพลาดที่คล้ายกันหากคุณส่งผ่านตำแหน่งไปยัง loc

อ่านเพิ่มเติม: คำถามสัมภาษณ์แพนด้า

เรียนรู้เพิ่มเติมเกี่ยวกับ Python

นักเรียนต้องถามคำถามและค้นหาคำตอบ เราหวังว่าบทความนี้จะตอบคำถามของคุณเกี่ยวกับ loc ใน Pandas (หรือ iloc ใน Python) จะเป็นการดีที่สุดถ้าคุณลองใช้ฟังก์ชันเหล่านี้ด้วยตัวเองกับชุดข้อมูลต่างๆ เพื่อทำความเข้าใจวิธีการทำงาน

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Python, Pandas และหัวข้อที่เกี่ยวข้อง คุณควรไปที่บล็อกของเรา ผู้เชี่ยวชาญของเราเพิ่มแหล่งข้อมูลโดยละเอียดมากมายที่นั่น

หากคุณอยากเรียนรู้เกี่ยวกับวิทยาศาสตร์ข้อมูล ลองดูโปรแกรม Executive PG ของ IIIT-B & upGrad ใน Data Science ซึ่งสร้างขึ้นสำหรับมืออาชีพที่ทำงานและมีกรณีศึกษาและโครงการมากกว่า 10 รายการ เวิร์กช็อปภาคปฏิบัติจริง การให้คำปรึกษากับผู้เชี่ยวชาญในอุตสาหกรรม 1 -on-1 พร้อมที่ปรึกษาในอุตสาหกรรม การเรียนรู้มากกว่า 400 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

เราจะเพิ่มแถวของ Pandas DataFrame ได้อย่างไร

ในการแทรกแถวใน DataFrame เราสามารถใช้คำสั่ง loc, iloc และ ix

1. loc ส่วนใหญ่จะใช้สำหรับป้ายกำกับดัชนีของเรา อาจเป็นที่เข้าใจได้เมื่อเราแทรกใน loc 4 ซึ่งระบุว่าเรากำลังค้นหารายการ DataFrame ด้วยดัชนี 4
2. ส่วนใหญ่จะใช้ iloc เพื่อค้นหาตำแหน่งในดัชนี เหมือนกับว่าเราแทรกใน iloc 4 ซึ่งระบุว่าเรากำลังค้นหารายการ DataFrame ที่มีอยู่ในดัชนี 4
3. กรณี ix นั้นซับซ้อนเพราะเราส่งป้ายกำกับไปที่ ix หากดัชนีเป็นแบบจำนวนเต็ม ix 4 ระบุว่าเรากำลังค้นหา DataFrame เพื่อหาค่าที่มีดัชนีเท่ากับ 4

การจัดทำดัชนีใหม่ในบริบทของ Pandas ใน Python คืออะไร

ป้ายชื่อแถวและคอลัมน์ของ DataFrame จะมีการเปลี่ยนแปลงเมื่อเราสร้างดัชนีใหม่ คำว่า 'สร้างดัชนีใหม่' หมายถึงกระบวนการจัดแนวข้อมูลกับชุดป้ายกำกับเฉพาะตามแกนเดียว ใน Pandas การทำดัชนีใหม่สามารถใช้เพื่อเปลี่ยนดัชนีของแถวและคอลัมน์ของ DataFrame โครงสร้างข้อมูลดัชนีจำนวนมากที่เชื่อมต่อกับชุดแพนด้าจำนวนมากหรือ DataFrame ของแพนด้าสามารถใช้กับดัชนีได้

การดำเนินการข้อมูลบางอย่างใน Pandas มีอะไรบ้าง

มีการดำเนินการข้อมูลที่สำคัญหลายประการสำหรับ DataFrame ใน Pandas ซึ่งมีดังนี้:

1. การเลือกแถวและคอลัมน์ - โดยการส่งผ่านชื่อของแถวและคอลัมน์ เราสามารถเลือกแถวและคอลัมน์ใดก็ได้ใน DataFrame มันจะกลายเป็นมิติเดียวและถือเป็นชุดเมื่อคุณเลือกจาก DataFrame
2. การกรองข้อมูล - โดยใช้นิพจน์บูลีนบางตัวใน DataFrame เราสามารถกรองข้อมูลได้
3. ค่า Null - เมื่อไม่มีการให้ข้อมูลกับไอเท็ม พวกเขาจะได้รับค่า Null ไม่สามารถมีค่าใด ๆ ในคอลัมน์ต่าง ๆ ซึ่งโดยทั่วไปจะแสดงเป็น NaN