Nối các mảng dữ liệu trong Python

Concatinate dữ liệu

Trong quá trình xử lý dữ liệu với pandas, việc kết hợp nhiều bảng dữ liệu là thao tác rất phổ biến. Hàm concat() chính là công cụ mạnh mẽ giúp bạn làm điều này một cách dễ dàng, linh hoạt và hiệu quả. 

Trong bài viết này, UniTrain sẽ giúp bạn hiểu rõ về hàm concat() – cách sử dụng để nối các mảng dữ liệu, các tuỳ chọn quan trọng và ví dụ minh hoạ thực tế. 

 Hàm Concat() 

Hàm concat() giúp nối nhiều đối tượng Series hoặc DataFrame theo một trục, đồng thời thể xử chỉ mục của các trục khác bằng cách thực hiện các phép toán hợp hoặc giao. Tương tự như numpy.concatenate(), hàm này nhận một danh sách hoặc từ điển các đối tượng cùng kiểu nối chúng lại với nhau. 

import pandas as pd

# Creating two DataFrames
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2", "A3"],
    "B": ["B0", "B1", "B2", "B3"],
    "C": ["C0", "C1", "C2", "C3"],
    "D": ["D0", "D1", "D2", "D3"],
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"],
    "C": ["C4", "C5", "C6", "C7"],
    "D": ["D4", "D5", "D6", "D7"],
}, index=[4, 5, 6, 7])

# Concatenating the two DataFrames
result = pd.concat([df1, df2])

print(result)

Kết quả hiển thị:

    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4
5  A5  B5  C5  D5
6  A6  B6  C6  D6
7  A7  B7  C7  D7

Sử dụng Axis để thay đổi chiều nối

Từ khóa join dùng để xác định cách xử lý các giá trị trục (axis values) (ví dụ: index hoặc column) không tồn tại trong DataFrame đầu tiên.

Join=’outer’ (mặc định) sẽ lấy hợp (union) của tất cả các giá trị trên trục đó. Nếu các index hoặc column không trùng nhau, thì tất cả đều sẽ được giữ lại và những vị trí không có giá trị sẽ được điền NaN.

import pandas as pd

# DataFrame 1
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2'],
    'B': ['B0', 'B1', 'B2'],
    'C': ['C0', 'C1', 'C2']
}, index=[0, 1, 2])

# DataFrame 2
df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5'],
    'C': ['C3', 'C4', 'C5']
}, index=[3, 4, 5])

# Nối theo chiều ngang
result = pd.concat([df1, df2], axis=1)

print(result)

Kết quả hiển thị:

     A   B   C    A   B   C
0   A0  B0  C0  NaN NaN NaN
1   A1  B1  C1  NaN NaN NaN
2   A2  B2  C2  NaN NaN NaN
3  NaN NaN NaN   A3  B3  C3
4  NaN NaN NaN   A4  B4  C4
5  NaN NaN NaN   A5  B5  C5

Khi sử dụng pd.concat() với join=’inner’, bạn đang yêu cầu lấy giao của các giá trị chỉ số (index) trong tất cả các DataFrame mà bạn đang nối lại với nhau. Giao của chỉ số (intersection): Tức là chỉ những chỉ số xuất hiện trong tất cả các DataFrame mới được giữ lại trong kết quả. Các chỉ số không xuất hiện trong tất cả các DataFrame sẽ bị loại bỏ.

import pandas as pd

# DataFrame 1
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2'],
    'B': ['B0', 'B1', 'B2']
}, index=[0, 1, 2])

# DataFrame 2
df2 = pd.DataFrame({
    'C': ['C1', 'C2', 'C3'],
    'D': ['D1', 'D2', 'D3']
}, index=[1, 2, 3])

# Nối hai DataFrame theo chiều ngang, chỉ giữ lại các index chung
result = pd.concat([df1, df2], axis=1, join='inner')

print(result)

Kết quả hiển thị:

     A   B   C   D
1   A1  B1  C1  D1
2   A2  B2  C2  D2

Giữ index bên trái với reindex()

Khi thực hiện “left join”, ta giữ tất cả chỉ số từ DataFrame bên trái. Để đảm bảo kết quả giữ đúng chỉ số gốc, ta sử dụng reindex(). Điều này giúp chỉ số của kết quả trùng với chỉ số của DataFrame bên trái, ngay cả khi các DataFrame có chỉ số khác nhau.

import pandas as pd
# DataFrame gốc (df1)
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
}, index=[0, 1, 2, 3])

# DataFrame bổ sung (df4)
df4 = pd.DataFrame({
    'B': ['B2', 'B3', 'B6', 'B7'],
    'D': ['D2', 'D3', 'D6', 'D7'],
    'F': ['F2', 'F3', 'F6', 'F7']
}, index=[2, 3, 6, 7])

# Nối hai DataFrame và tái chỉ mục kết quả theo chỉ số của df1
result = pd.concat([df1, df4], axis=1).reindex(df1.index)

print(result)

Kết quả hiển thị:

     A   B   C   D    B    D    F
0   A0  B0  C0  D0  NaN  NaN  NaN
1   A1  B1  C1  D1  NaN  NaN  NaN
2   A2  B2  C2  D2   B2   D2   F2
3   A3  B3  C3  D3   B3   D3   F3

Khi bạn nối (concatenate) nhiều DataFrame lại với nhau bằng pd.concat() hoặc DataFrame.append(), mỗi DataFrame có thể có chỉ mục (index) riêng. Nếu các chỉ mục này bị trùng lặp, kết quả có thể gây nhầm lẫn hoặc lỗi.  

Để tránh điều này, bạn có thể sử dụng tham số ignore_index=True. Khi được đặt, pandas sẽ bỏ qua các chỉ mục gốc và tạo lại chỉ mục mới liên tục từ 0. 

import pandas as pd

# DataFrame 1 có các cột: A, B, C, D
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3'] })

# DataFrame 2 có các cột: B, D, F (thiếu A và C, có thêm F)
df2 = pd.DataFrame({
    'B': ['B2', 'B3', 'B6', 'B7'],
    'D': ['D2', 'D3', 'D6', 'D7'],
    'F': ['F2', 'F3', 'F6', 'F7'] })

# Nối hai DataFrame lại với nhau
result = pd.concat([df1, df2], ignore_index=True, sort=False)

print(result)

Kết quả hiển thị:

     A    B    C    D    F
0   A0   B0   C0   D0  NaN
1   A1   B1   C1   D1  NaN
2   A2   B2   C2   D2  NaN
3   A3   B3   C3   D3  NaN
4  NaN   B2  NaN   D2   F2
5  NaN   B3  NaN   D3   F3
6  NaN   B6  NaN   D6   F6
7  NaN   B7  NaN   D7   F7

Kết luận

Hàm concat() trong pandas là một công cụ cực kỳ linh hoạt để kết hợp nhiều bảng dữ liệu lại với nhau. Việc hiểu rõ cách hoạt động của các tham số như axis, join, ignore_index sẽ giúp bạn xử lý dữ liệu nhanh chóng và chính xác hơn, đặc biệt trong các dự án phân tích và làm sạch dữ liệu thực tế.

Hãy luyện tập nhiều tình huống khác nhau để thành thạo hơn với concat() cũng như các thao tác tiền xử lý dữ liệu quan trọng khác nhé!

Xem thêm

Xử lý và trực quan hóa dữ liệu với Python

Cách sử dụng Function trong Python

Bắt đầu với Pandas: Cách tạo Series và DataFrame một cách dễ dàng

Ngoài ra, các bạn có thể theo dõi Fanpage để cập nhật nhanh những kiến thức khác nữa nhé!

Bài viết liên quan
Field Parameters – Bí kíp tùy chỉnh báo cáo linh hoạt trên Power BI

Trong trực quan hóa dữ liệu, Power BI của Microsoft đã thay đổi cách người dùng khai thác và tương tác với thông tin. Một trong những tính năng nổi bật

Xem thêm
Kích hoạt Data Analysis ToolPak trong Excel

Bạn muốn phân tích dữ liệu trong Excel nhưng không tìm thấy những công cụ như t-test, ANOVA, hay Regression ở đâu? Đừng lo, chúng không biến mất đâu – chỉ là

Xem thêm
[RECAP] Training 4: How to Write M&A Buy-Sell Recommendations – Cuộc thi Sinh viên với Tài chính mùa 13 (FSC13) – CLB Tài chính – Chứng khoán SeSC – Trường Đại học Ngoại Thương CSII TP. HCM (FTU2)

Chiều ngày 28/04/2025, buổi Training 4 dành cho Top 8 đội thi xuất sắc nhất cuộc thi Sinh viên với Tài chính mùa 13 (FSC13) đã diễn ra trực tiếp tại

Xem thêm
Phân biệt hàm SUM, SUMX và CALCULATE trong Power BI

1. Giới thiệu Trong Power BI, DAX (Data Analysis Expressions) cung cấp nhiều hàm để tổng hợp và phân tích dữ liệu. Ba trong số các hàm quan trọng nhất là

Xem thêm