Thep Excel

pandas concat — ต่อตารางข้อมูลเข้าหากันแบบกองแถวหรือเพิ่มคอลัมน์

pd.concat ผมใช้สำหรับนำ DataFrame หลายตัวมาเชื่อมต่อกัน จะต่อแนวตั้ง (กองแถว) หรือแนวนอน (เพิ่มคอลัมน์) ก็ได้ ถ้าใครเคยใช้ Power Query ใน Excel แล้ว Append Queries คือตัวเทียบเคียงที่ใกล้เคียงที่สุดครับ

pd.concat(objs, axis, join, ignore_index, keys)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

pd.concat(objs, axis, join, ignore_index, keys)

คืนค่า (Returns)
DataFrame

คืนเป็น DataFrame ใหม่เสมอครับ ไม่ได้แก้ไข DataFrame ต้นฉบับ ผลลัพธ์พร้อมใช้ต่อได้เลย ไม่ต้อง chain อะไรเพิ่ม

Argument Type Required Default Description
objs list | dict Yes list ของ DataFrame หรือ Series ที่ต้องการเชื่อมต่อ เช่น [df1, df2, df3] หรือ dict {‘jan’: df_jan, ‘feb’: df_feb}
axis int | str Optional 0 ทิศทางการเชื่อม: 0 หรือ ‘index’ = กองแถวแนวตั้ง (default), 1 หรือ ‘columns’ = ต่อคอลัมน์แนวนอน
join str Optional 'outer' ‘outer’ = รวม index/column ทั้งหมด เติม NaN ที่ขาด (default). ‘inner’ = เอาเฉพาะส่วนที่ตรงกัน ตัดส่วนที่ไม่มีทิ้ง
ignore_index bool Optional False True = รัน index ใหม่ตั้งแต่ 0 ทันที ใช้ตอนกองแถวจากหลายแหล่งที่ index ซ้ำกัน
keys sequence Optional None ใส่ label ให้แต่ละ DataFrame เพื่อสร้าง MultiIndex ในผลลัพธ์ ช่วยให้รู้ว่าแถวไหนมาจากแหล่งไหน
verify_integrity bool Optional False True = ตรวจสอบว่า index ซ้ำหลัง concat ไหม ถ้าซ้ำ raise error ใช้ตอน debug ครับ แต่ช้า ไม่แนะนำใช้กับข้อมูลใหญ่

Examples

ตัวอย่างที่ 1: กองแถวสองตารางเข้าด้วยกัน (axis=0)
pd.concat([df_jan, df_feb])
ผมเอา df_jan กับ df_feb มากองซ้อนกันแนวตั้ง คอลัมน์ตรงกันพอดีก็รวมได้เลยครับ สังเกตว่า index ผลลัพธ์จะเป็น 0,1,0,1 เพราะยังใช้ index เดิมของแต่ละ DataFrame อยู่ ถ้าอยากให้เรียงต่อเนื่องต้องใส่ ignore_index=True
Python Code:

pd.concat([df_jan, df_feb])

Result:

month sales
0 Jan 100
1 Jan 200
0 Feb 150
1 Feb 250

ตัวอย่างที่ 2: กองแถวและรีเซ็ต index ด้วย ignore_index=True
pd.concat([df_jan, df_feb], ignore_index=True)
เพิ่ม ignore_index=True เข้าไป pandas จะรัน index ใหม่ตั้งแต่ 0 ถึง 3 ให้อัตโนมัติเลยครับ ผมใช้แทบทุกครั้งตอนรวมไฟล์หลายเดือน เพราะแต่ละไฟล์เริ่ม index ที่ 0 เหมือนกันหมด พอกองแล้ว index ซ้ำกัน ใส่ ignore_index=True ปัญหาหายครับ
Python Code:

pd.concat([df_jan, df_feb], ignore_index=True)

Result:

month sales
0 Jan 100
1 Jan 200
2 Feb 150
3 Feb 250

ตัวอย่างที่ 3: ต่อคอลัมน์แนวนอน (axis=1)
pd.concat([df_score, df_grade], axis=1)
เปลี่ยนเป็น axis=1 ผมเอาสองตารางที่มีจำนวนแถวเท่ากันมาวางข้างกัน ได้ DataFrame ที่รวมคอลัมน์จากทั้งสอง เหมือนเพิ่มคอลัมน์ใหม่เข้าไปในตารางเดิมครับ ใช้ตอนคำนวณ feature ไว้ใน DataFrame แยก แล้วอยากนำมารวมกันทีเดียว
Python Code:

pd.concat([df_score, df_grade], axis=1)

Result:

name score grade passed
0 Alice 90 A True
1 Bob 80 B True

ตัวอย่างที่ 4: ใช้ keys ระบุแหล่งที่มาของแต่ละ DataFrame
pd.concat([df_jan, df_feb], keys=['Jan', 'Feb'])
ใส่ keys=['Jan', 'Feb'] เข้าไป ผลลัพธ์จะมี MultiIndex สองระดับ ระดับนอกบอกว่าแถวนี้มาจากเดือนไหน ระดับในคือ index เดิมครับ ผมใช้ตอนอยากเก็บข้อมูลว่าแถวไหนมาจากแหล่งไหน โดยไม่ต้องสร้างคอลัมน์เพิ่ม
Python Code:

pd.concat([df_jan, df_feb], keys=['Jan', 'Feb'])

Result:

sales
Jan 0 100
1 200
Feb 0 150
1 250

FAQs

concat ต่างจาก merge ยังไง ใช้ตัวไหนดี?

ผมแยกง่ายๆ แบบนี้ครับ — concat คือ ‘ต่อตำแหน่ง’ ไม่ดูว่าค่าในแถวตรงกันไหม แค่เอาตารางมาวางต่อกัน (กองแถวหรือต่อคอลัมน์) ส่วน merge คือ ‘join ตาม key’ เหมือน VLOOKUP ที่ต้องมีคอลัมน์ที่มีค่าตรงกันเพื่อจับคู่แถว ถ้าโจทย์คือ ‘เอาข้อมูลหลายไฟล์มารวมกัน’ ใช้ concat ถ้าโจทย์คือ ‘เอาข้อมูลสองตารางมาจับคู่กันตามรหัสสินค้า’ ใช้ merge ครับ

ถ้าคอลัมน์ไม่ตรงกันจะเกิดอะไร?

pandas จะเติม NaN ให้ที่ช่องที่ขาดอัตโนมัติเลยครับ (นี่คือพฤติกรรม join=’outer’ ซึ่งเป็น default) ตัวอย่างเช่น df1 มีคอลัมน์ A,B และ df2 มีคอลัมน์ B,C พอ concat ผลลัพธ์จะมีครบทั้ง A,B,C แถวจาก df1 จะได้ NaN ที่คอลัมน์ C และแถวจาก df2 จะได้ NaN ที่คอลัมน์ A ครับ ถ้าอยากเอาเฉพาะคอลัมน์ที่มีทั้งสองตาราง ใส่ join=’inner’ ได้เลย

รวมไฟล์ Excel หลายไฟล์ด้วย concat ยังไง?

ผมใช้แบบนี้ครับ — ก่อนอื่นโหลดทุกไฟล์ใส่ list comprehension แล้วค่อยยิง concat ครั้งเดียว เช่น files = [‘jan.xlsx’,’feb.xlsx’,’mar.xlsx’] แล้ว pd.concat([pd.read_excel(f) for f in files], ignore_index=True) บรรทัดเดียวได้ข้อมูลรวมทั้งสามเดือนเลย สิ่งสำคัญคือ อย่าสร้าง DataFrame เปล่าแล้ว concat ทีละไฟล์ใน loop นะครับ มันช้ามาก ควร build list ก่อนแล้ว concat ครั้งเดียวตอนจบ

Resources & Related

Additional Notes

ฟังก์ชันที่ผมใช้บ่อยมากตอนรวมข้อมูลจากหลายไฟล์หรือหลายช่วงเวลาเข้าด้วยกันคือ pd.concat ครับ ลองนึกภาพข้อมูลขายรายเดือน 12 ไฟล์ ผมแค่โหลดทั้งหมดใส่ list แล้วยิง concat ตัวเดียว ได้ตารางรวมทันที ไม่ต้องวน loop ก็อปทีละไฟล์ 😎

การทำงานหลักของ concat มีสองโหมดครับ:
– **axis=0 (default)** — กองแถวแนวตั้ง เหมือนวางตารางซ้อนกัน คอลัมน์ตรงกันก็รวมกัน คอลัมน์ไม่ตรงก็เติม NaN ให้อัตโนมัติ (join=’outer’)
– **axis=1** — ต่อคอลัมน์แนวนอน เหมือนเอาตารางวางข้างกัน ใช้ตอนอยากรวม feature จากหลาย DataFrame ที่มี index ตรงกัน

ที่เจ๋งคือ ignore_index=True ครับ เวลากองแถวจากหลายแหล่ง index อาจซ้ำกัน (ทุกไฟล์เริ่มที่ 0) ใส่ ignore_index=True ปุ๊บ pandas รันเลข index ใหม่ให้ตั้งแต่ 0 ถึง n-1 เรียบร้อย ✨

ส่วนตัวผมสิ่งที่ต้องจำให้ขึ้นใจคือ concat vs merge ต่างกันอย่างนี้ครับ — concat คือการ “ต่อตำแหน่ง” (stack ตาม index/column label) ส่วน merge คือการ “join ตาม key” เหมือน VLOOKUP ที่จับคู่แถวด้วยค่าในคอลัมน์ ถ้าไม่มี key ให้ match ให้นึกถึง concat ก่อนเลยครับ

Leave a Reply

Your email address will not be published. Required fields are marked *