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