ฟังก์ชัน 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])