Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - เพิ่มแถวข้อมูลลง DataFrame ด้วย iloc (Integer Location Indexing)

เมธอด iloc[] ใช้เข้าถึงข้อมูลด้วย **ตำแหน่งจำนวนเต็ม (integer position)** สามารถใช้แทรก/แก้ไขแถวที่ตำแหน่งเฉพาะได้ แต่ ไม่ใช่วิธีมาตรฐานในการเพิ่มแถวใหม่** (ควรใช้ pd.concat หรือ loc แทน)

ขั้นตอนการทำงาน

1. สร้าง DataFrame ข้อมูลทีม

import pandas as pd

Team = [
    ['India', 1, 100],
    ['Australia', 2, 85],
    ['England', 3, 75],
    ['New Zealand', 4, 65],
    ['South Africa', 5, 50],
    ['Bangladesh', 6, 40]
]
dataFrame = pd.DataFrame(Team, columns=['Country', 'Rank', 'Points'])

2. แทนที่แถว index 5 (แถวที่ 6) ด้วยข้อมูลใหม่

myList = ["Sri Lanka", 7, 30]
dataFrame.iloc[5] = myList  # แทนที่แถวที่ position 5 (index 5)

โค้ดตัวอย่างสมบูรณ์

import pandas as pd

Team = [
    ['India', 1, 100],
    ['Australia', 2, 85],
    ['England', 3, 75],
    ['New Zealand', 4, 65],
    ['South Africa', 5, 50],
    ['Bangladesh', 6, 40]
]
dataFrame = pd.DataFrame(Team, columns=['Country', 'Rank', 'Points'])
print("DataFrame:\n", dataFrame)

# แถวใหม่
myList = ["Sri Lanka", 7, 30]

# แทนที่แถว index 5 (Bangladesh)
dataFrame.iloc[5] = myList

print("\nUpdated DataFrame (replaced row 5):\n", dataFrame)

ผลลัพธ์

DataFrame:
        Country  Rank  Points
0         India     1     100
1     Australia     2      85
2       England     3      75
3   New Zealand     4      65
4  South Africa     5      50
5    Bangladesh     6      40

Updated DataFrame (replaced row 5):
        Country  Rank  Points
0         India     1     100
1     Australia     2      85
2       England     3      75
3   New Zealand     4      65
4  South Africa     5      50
5    Sri Lanka     7      30

⚠️ ข้อสำคัญ: iloc ไม่ใช่สำหรับ "Append"

  • iloc[5] = **แทนที่** แถวที่มีอยู่ (position 5) ไม่ใช่เพิ่มแถวใหม่
  • ถ้า index 5 ไม่อยู่ (DataFrame มีแค่ 5 แถว index 0-4) → จะเกิด IndexError
  • ไม่สามารถ iloc[len(df)] = new_row ได้ (ไม่ขยาย DataFrame)

วิธีเพิ่มแถวใหม่ที่ถูกต้อง

# 1. pd.concat (แนะนำสำหรับหลายแถว)
new_row = pd.DataFrame([["Sri Lanka", 7, 30]], columns=df.columns)
df = pd.concat([df, new_row], ignore_index=True)

# 2. loc กับ index ใหม่ (สำหรับแถวเดียว)
df.loc[len(df)] = ["Sri Lanka", 7, 30]  # ใช้ได้เพราะ len(df) = index ใหม่

# 3. append (deprecated)
# df = df.append({"Country": "Sri Lanka", "Rank": 7, "Points": 30}, ignore_index=True)

การใช้งาน iloc ที่ถูกต้อง

รูปแบบคำอธิบาย
df.iloc[row_index]เข้าถึงแถว (Series)
df.iloc[row_index, col_index]เข้าถึงเซลล์เดียว
df.iloc[row_slice, col_slice]Slice แถวและคอลัมน์
df.iloc[list_of_indices]เลือกหลายแถวพร้อมกัน
df.iloc[:, col_list]เลือกคอลัมน์ตามตำแหน่ง

สรุป

  • iloc ใช้สำหรับ **อ่าน/เขียน ตำแหน่งที่มีอยู่แล้ว**
  • ใช้ loc[len(df)] หรือ pd.concat สำหรับ **เพิ่มแถวใหม่**
  • ใช้ df.at[] / df.iat[] สำหรับเข้าถึงเซลล์เดี่ยว (เร็วกว่า)