Ghép Nối & Biến Đổi Dữ Liệu — Khi Dữ Liệu Nằm Ở Nhiều Nơi

Tóm tắt nhanh: Dữ liệu thật hiếm khi nằm gọn trong 1 bảng — thông tin khách hàng ở 1 nơi, đơn hàng ở nơi khác. pd.merge() ghép các bảng lại đúng cách dựa trên 1 cột chung (như ID khách hàng), và có 4 kiểu ghép khác nhau cho các tình huống khác nhau.
Hàm: pd.merge()4 kiểu: inner/left/right/outerBài cuối Module 4

Đây là bài cuối Module 4 — kỹ năng cuối cùng để hoàn thiện bộ công cụ xử lý dữ liệu Python trước khi chuyển sang trực quan hóa (Module 5). Dữ liệu thật thường nằm rải rác ở nhiều bảng, cần ghép lại đúng cách mới phân tích được.

Vấn đề: thông tin khách hàng và đơn hàng nằm ở 2 nơi khác nhau

Bảng khách hàngID, Tên, Email+Bảng đơn hàngID, Sản phẩm, Giá=1 bảng đủ thông tin
Bảng khách hàng có tên/email, bảng đơn hàng có sản phẩm/giá — cả 2 đều có cột ID khách hàng chung để nối lại thành 1 bảng đầy đủ thông tin.

pd.merge(df1, df2, on="ID") là cách ghép cơ bản nhất — chỉ cần chỉ ra cột chung giữa 2 bảng, pandas tự tìm và ghép đúng dòng tương ứng.

4 kiểu ghép — chọn sai kiểu sẽ làm mất dữ liệu không ngờ

4 kiểu ghép nối cơ bảninner (mặc định)Chỉ giữ khớp cả 2 bênleftGiữ toàn bộ bảng bên tráiouterGiữ toàn bộ cả 2 bên
inner: chỉ giữ dòng khớp ở CẢ 2 bảng (mặc định). left/right: giữ toàn bộ 1 bên, kể cả không khớp bên kia. outer: giữ toàn bộ cả 2 bên.

Lỗi rất dễ mắc: dùng mặc định “inner” khi thực ra cần “left” — dẫn đến MẤT dữ liệu 1 cách âm thầm (những khách hàng chưa có đơn hàng nào sẽ biến mất khỏi kết quả, dù dữ liệu khách hàng đó vẫn đúng). Luôn kiểm tra số dòng TRƯỚC và SAU khi merge để phát hiện sớm nếu có mất dữ liệu ngoài ý muốn.

Xem thêm

Video này (tiếng Anh) minh họa trực quan sự khác nhau giữa merge, join, concat, và append trong pandas.

Checklist tự kiểm tra sau bài này
  • Bạn viết được code pd.merge() cơ bản để ghép 2 bảng theo 1 cột chung.
  • Bạn giải thích được sự khác nhau giữa inner, left, right, outer join.
  • Bạn biết kiểm tra số dòng trước/sau merge để phát hiện mất dữ liệu ngoài ý muốn.
Cần nhớ

Kết thúc Module 4: bạn giờ có đủ bộ công cụ để đưa dữ liệu từ “thô, rải rác, nhiều nguồn” đến “1 bảng sạch, sẵn sàng phân tích” — cài đặt, cấu trúc dữ liệu, NumPy, pandas, đọc từ nhiều nguồn, làm sạch, xử lý văn bản, và ghép nối. Module 5 sẽ dùng chính bộ công cụ này để TRỰC QUAN HÓA và phân tích chuỗi thời gian.

Câu hỏi thường gặp

Merge có luôn cần 2 bảng có cùng tên cột không?

Không — nếu tên cột khác nhau ở 2 bảng, dùng tham số left_on/right_on để chỉ rõ cột nào ghép với cột nào, không cần đổi tên cột trước.

Nên dùng inner hay outer join?

Tùy mục đích: nếu chỉ cần dữ liệu có ĐỦ thông tin cả 2 bên (không thiếu), dùng inner. Nếu cần GIỮ LẠI mọi dòng dù thiếu thông tin 1 bên, dùng left/right/outer tùy trường hợp.

Lỗi merge phổ biến nhất là gì?

Merge nhân đôi dữ liệu do cột nối có giá trị TRÙNG LẶP ở 1 hoặc cả 2 bảng — luôn kiểm tra .shape trước/sau để phát hiện số dòng tăng bất thường.

Nguồn: Wes McKinney, Python for Data Analysis (3rd ed.), Chương 8 “Data Wrangling: Join, Combine, and Reshape”, phần “Database-Style DataFrame Joins” (O’Reilly, 2022). Nội dung diễn giải lại bằng lời riêng, không sao chép nguyên văn.