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

Python Pandas: เพิ่มแถวข้อมูลด้วย loc[] (แทน append())

บทนำ

DataFrame.loc[] ใช้เข้าถึงแถว/คอลัมน์ด้วย label สามารถใช้เพิ่มแถวใหม่ได้โดยระบุ index ใหม่คือ len(df) เป็นวิธีที่แนะนำแทน append() ที่ deprecated แล้ว

ตัวอย่างโค้ด


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

df = pd.DataFrame(Team, columns=['Country', 'Rank', 'Points'])

print("DataFrame ต้นทาง:")
print(df)

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

# เพิ่มด้วย loc[len(df)]
df.loc[len(df)] = new_row

print("\nDataFrame หลังเพิ่มแถว:")
print(df)

ผลลัพธ์


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

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
6  Sri Lanka     7      30

เปรียบเทียบ: loc[] vs append() vs concat()

วิธีSyntaxPerformanceสถานะ
df.loc[len(df)] = rowSimpleเร็ว (single row)✅ แนะนำ
df.append()df.append(new_df)ช้า (copy ทุกครั้ง)❌ Deprecated
pd.concat()pd.concat([df, new_df])ดี (batch)✅ แนะนำหลายแถว

กรณี Index ไม่ใช่ RangeIndex


# ถ้า index ไม่ใช่ 0,1,2...
df_custom = df.set_index('Country')
# df_custom.index = ['India', 'Australia', ...]

# ใช้ index สูงสุด + 1 หรือ uuid
new_index = df_custom.index.max() + 1  # ถ้าเป็น numeric
# หรือ
import uuid
new_index = str(uuid.uuid4())

df_custom.loc[new_index] = [7, 30]  # Rank, Points (Country เป็น index)

ข้อควรระวัง

  • ลิสต์ที่ส่งให้ loc[] ต้องมีลำดับคอลัมน์ตรงกับ DataFrame
  • การใช้ในลูปหลายรอบ: for row in rows: df.loc[len(df)] = row ช้า (copy ทุกรอบ)
  • Best practice: สะสม rows ใน list → สร้าง DataFrame ครั้งเดียว

Best Practice สำหรับหลายแถว


# ❌ ช้า: ใช้ loc ในลูป
for row in new_rows:
    df.loc[len(df)] = row

# ✅ เร็ว: สะสมในลิสต์ แล้ว concat ครั้งเดียว
new_df = pd.DataFrame(new_rows, columns=df.columns)
df = pd.concat([df, new_df], ignore_index=True)

# ✅ เร็วที่สุด: สร้าง DataFrame ครั้งเดียวตั้งแต่แรก
all_rows = original_rows + new_rows
df = pd.DataFrame(all_rows, columns=['Country', 'Rank', 'Points'])

สรุป

ใช้ df.loc[len(df)] = row เพิ่มแถวเดี่ยว แทน append() ที่ deprecated สำหรับหลายแถว ใช้ pd.concat() หรือสะสมในลิสต์ก่อนสร้าง DataFrame ครั้งเดียว