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

วิธีเพิ่มแถวใหม่ใน DataFrame ด้วย Template ใน Pandas

บทนำ

ในงาน Data Engineering บ่อยครั้งต้องสร้างแถวตัวอย่าง (sample rows) เอง แทนที่จะรอทีมฐานข้อมูล สร้าง template จากโครงสร้างคอลัมน์เดิม จะช่วยป้องกันการพิมพ์ชื่อคอลัมน์ผิดหรือลืมคอลัมน์

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

1. สร้าง DataFrame ตัวอย่าง


import pandas as pd
import numpy as np

players_info = pd.DataFrame(data=[
    {"players": "Roger Federer", "titles": 20},
    {"players": "Rafael Nadal", "titles": 20},
    {"players": "Novak Djokovic", "titles": 17},
    {"players": "Andy Murray", "titles": 3}
], columns=["players", "titles"])

2. เพิ่มแถวด้วย .loc (แก้ไข in-place)


# เพิ่มด้วย list
players_info.loc[4] = ['Dominic Theim', 1]

# เพิ่มด้วย dictionary
players_info.loc[len(players_info)] = {'players': 'Daniel Medvedev', 'titles': 0}

# เพิ่มด้วย Series
players_info.loc[len(players_info)] = pd.Series({'players': 'Andy Zverev', 'titles': 0})

.loc แก้ไข DataFrame ตรงๆ

3. เพิ่มแถวด้วย .append (คืน DataFrame ใหม่)

.append ไม่แก้ไข DataFrame ต้นฉบับ คืน copy ใหม่ พารามิเตอร์แรกต้องเป็น DataFrame, Series, dict, หรือ list


# DataFrame พร้อม index แบบกำหนดเอง
players_info = pd.DataFrame(data=[...], columns=["players", "titles"], index=["roger", "nadal", "djokovic", "murray"])

# append dict ต้องใช้ ignore_index=True
new_df = players_info.append({'players': 'Daniel Medvedev', 'titles': 0}, ignore_index=True)
# ignore_index=True → index เดิมหาย กลายเป็น RangeIndex 0..n-1

4. เพิ่มหลายแถวพร้อมกัน


player1 = pd.Series({'players': 'Andy Zverev', 'titles': 0}, name='zverev')
player2 = pd.Series({'players': 'Dominic Theim', 'titles': 1}, name='theim')
new_df_1 = players_info.append([player1, player2])
# index เดิมคงอยู่ (roger, nadal, ...) เพิ่ม zverev, theim ต่อท้าย

5. สร้าง Template สำหรับ DataFrame หลายคอลัมน์

โหลดข้อมูลหนัง 12 คอลัมน์ สร้าง template จากแถวแรก


df = pd.read_csv("movies_data.csv")
columns_dictionary = df.iloc[0].to_dict()
# {'budget': 237000000, 'id': 19995, 'original_language': 'en', ...}

6. ล้างค่าเก่า สร้าง template ใหม่


import datetime
new_data_dict = {}
for a, b in columns_dictionary.items():
    if isinstance(b, str):
        new_data_dict[a] = np.random.choice(list('abcde'))  # random string
    elif isinstance(b, datetime.date):
        new_data_dict[a] = np.nan
    else:
        new_data_dict[a] = np.nan

# new_data_dict พร้อมใช้เป็น template เพิ่มแถวใหม่
# {'budget': nan, 'id': nan, 'original_language': 'e', 'original_title': 'a', ...}

สรุป

  • .loc เพิ่มแถว in-place ใช้ index ที่มีอยู่หรือ len(df)
  • .append คืน DataFrame ใหม่ ต้อง ignore_index=True สำหรับ dict
  • สร้าง template จาก df.iloc[0].to_dict() แล้วล้างค่า → กัน typo คอลัมน์ และลืมคอลัมน์
  • Template เหมาะสำหรับ DataFrame หลายคอลัมน์ (12+ คอลัมน์)