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

Python - รวม (Concatenate) DataFrame มากกว่า 2 ตัวด้วย pd.concat

ฟังก์ชัน pd.concat() รองรับการรวม DataFrame ได้ไม่จำกัดจำนวน โดยรับ list ของ DataFrame เข้าไป สามารถต่อแถว (axis=0) หรือต่อคอลัมน์ (axis=1)

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

1. สร้าง DataFrame 3 ตัว

import pandas as pd

dataFrame1 = pd.DataFrame({
    "Col1": [10, 20, 30],
    "Col2": [40, 50, 60],
    "Col3": [70, 80, 90],
}, index=[0, 1, 2])

dataFrame2 = pd.DataFrame({
    "Col1": [100, 110, 120],
    "Col2": [130, 140, 150],
    "Col3": [160, 170, 180],
}, index=[3, 4, 5])

dataFrame3 = pd.DataFrame({
    "Col1": [200, 210, 220],
    "Col2": [230, 240, 250],
    "Col3": [260, 270, 280],
}, index=[6, 7, 8])

2. รวมทั้ง 3 DataFrame

res = [dataFrame1, dataFrame2, dataFrame3]
combined = pd.concat(res)
print(combined)

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

import pandas as pd

# DataFrame 1
dataFrame1 = pd.DataFrame({
    "Col1": [10, 20, 30],
    "Col2": [40, 50, 60],
    "Col3": [70, 80, 90],
}, index=[0, 1, 2])
print("DataFrame1:\n", dataFrame1)

# DataFrame 2
dataFrame2 = pd.DataFrame({
    "Col1": [100, 110, 120],
    "Col2": [130, 140, 150],
    "Col3": [160, 170, 180],
}, index=[3, 4, 5])
print("\nDataFrame2:\n", dataFrame2)

# DataFrame 3
dataFrame3 = pd.DataFrame({
    "Col1": [200, 210, 220],
    "Col2": [230, 240, 250],
    "Col3": [260, 270, 280],
}, index=[6, 7, 8])
print("\nDataFrame3:\n", dataFrame3)

# Concatenate ทั้ง 3
res = [dataFrame1, dataFrame2, dataFrame3]
combined = pd.concat(res)
print("\nConcatenated:\n", combined)

ผลลัพธ์

Concatenated:
    Col1  Col2  Col3
0     10    40    70
1     20    50    80
2     30    60    90
3    100   130   160
4    110   140   170
5    120   150   180
6    200   230   260
7    210   240   270
8    220   250   280

รายละเอียดสำคัญ

  • Index เดิมถูกเก็บไว้ (0,1,2,3,4,5,6,7,8) → ใช้ ignore_index=True ถ้าต้องการ reset
  • คอลัมน์ตรงกันทั้ง 3 DataFrame → ไม่มี NaN
  • ถ้าคอลัมน์ไม่ตรง: join='outer' (default) จะมี NaN, join='inner' จะเก็บเฉพาะคอลัมน์ร่วม

รูปแบบอื่นๆ ของ concat

# ต่อคอลัมน์ (axis=1) - ต้องมี index เท่ากัน
pd.concat([df1, df2], axis=1)

# ใช้ keys สร้าง MultiIndex
pd.concat([df1, df2], keys=['df1', 'df2'])

# Concat แบบ dictionary
pd.concat({'df1': df1, 'df2': df2})  # MultiIndex level 0 = keys

Performance Tips

  • หลีกเลี่ยง concat ใน loop (ช้า O(n²)) → สะสมใน list แล้ว concat ครั้งเดียว
  • Pre-allocate list: dfs = [None]*n; dfs[i] = df; pd.concat(dfs)
  • ใช้ dtype เหมือนกันในทุก DataFrame ลด overhead

⚠️ Deprecated: append()

# เก่า (deprecated)
df1.append(df2).append(df3)

# ใหม่ (แนะนำ)
pd.concat([df1, df2, df3])