Cách hợp nhất các khung dữ liệu (DataFrames) bằng Python

Cách hợp nhất các khung dữ liệu bằng Python

Chia sẻ kiến thức 11/08/2022

Nếu bạn đang làm việc với một vài khung dữ liệu (Data Frame) có liên quan đến nhau, có thể bạn sẽ muốn hợp nhất chúng làm một. Thư viện panda có thể trợ giúp cho bạn như thế nào? 

 

Nếu bạn sử dụng Python, dù để thực hiện các tác vụ đơn giản nhất, bạn có thể đã biết về tầm quan trọng của các thư viện bên thứ ba của nó. Thư viện Pandas, với sự hỗ trợ tuyệt vời cho các khung dữ liệu (DataFrames), là một trong những thư viện như vậy.

Bạn có thể nhập nhiều loại tệp vào khung dữ liệu Python và tạo nhiều phiên bản khác nhau để lưu trữ các tập dữ liệu khác nhau. Sau khi nhập dữ liệu của mình bằng khung dữ liệu, bạn có thể hợp nhất chúng để thực hiện phân tích chi tiết.

1. Các bước cơ bản

Trước hết, bạn cần có các khung dữ liệu để hợp nhất. Bạn có thể tạo một số dữ liệu giả để thử nghiệm.

1.1 Tạo khung dữ liệu bằng Python

Bước đầu tiên, hãy nhập thư viện Pandas vào file Python của bạn. Pandas là một thư viện của bên thứ ba xử lý khung dữ liệu bằng Python. Bạn có thể sử dụng câu lệnh import (nhập) để sử dụng thư viện, như sau:

import pandas as pd

Bạn có thể gán một bí danh (alias) cho tên thư viện.

Bạn cần tạo từ điển, sau đó có thể chuyển đổi chúng thành các khung dữ liệu. Để có kết quả tốt nhất, hãy tạo hai biến từ điển — dict1 và dict2— để lưu trữ các phần thông tin cụ thể:

dict1 = {"user_id": ["001", "002", "003", "004", "005"],
        "FName": ["John", "Brad", "Ron", "Roald", "Chris"],
        "LName": ["Harley", "Cohen", "Dahl", "Harrington", "Kerr-Hislop"]}
 
dict2 = {"user_id": ["001", "002", "003", "004"], "Age": [15, 28, 34, 24]}

Hãy nhớ rằng, bạn cần có một phần tử chung trong cả hai giá trị từ điển, để đóng vai trò là khóa chính để kết hợp các khung dữ liệu của bạn sau này.

1.2 Chuyển từ điển của bạn thành khung dữ liệu

Để chuyển đổi các giá trị từ điển của bạn thành khung dữ liệu, bạn có thể sử dụng phương pháp sau:

df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)

Một số IDE cho phép bạn kiểm tra các giá trị trong khung dữ liệu bằng cách tham chiếu đến chức năng DataFrame và nhấn Run/Execute. Có nhiều IDE tương thích với Python , vì vậy bạn có thể chọn một IDE dễ học nhất.

Khi bạn đã hài lòng với nội dung của khung dữ liệu của mình, bạn có thể chuyển sang bước hợp nhất.

2. Kết hợp các khung với chức năng hợp nhất

Hàm merge (hợp nhất) là hàm Python đầu tiên bạn có thể sử dụng để kết hợp hai khung dữ liệu. Hàm này nhận các đối số mặc định sau:

pd.merge(DataFrame1, DataFrame2, how= type of merge)

Trong đó:

  • pd là bí danh của thư viện Pandas.
  • merge là chức năng hợp nhất khung dữ liệu
  • DataFrame1 và DataFrame2 là hai DataFrames để hợp nhất.
  • how: xác định kiểu hợp nhất.

Có sẵn một số đối số tùy chọn bổ sung mà bạn có thể sử dụng khi có cấu trúc dữ liệu phức tạp.

Bạn có thể sử dụng các giá trị khác nhau cho tham số how để xác định kiểu hợp nhất sẽ thực hiện. Bạn sẽ quen với những kiểu hợp nhất này nếu đã từng sử dụng SQL để hợp nhất các bảng cơ sở dữ liệu.

2.1 Hợp nhất trái (Left merge)

Kiểu hợp nhất bên trái giữ nguyên các giá trị của khung dữ liệu đầu tiên và kéo các giá trị phù hợp từ khung dữ liệu thứ hai.

2.2 Hợp nhất phải (right merge)

Hợp nhất phải giữ nguyên các giá trị của khung dữ liệu thứ hai và kéo các giá trị phù hợp từ khung dữ liệu đầu tiên.

2.3 Hợp nhất bên trong (inner merge)

Loại hợp nhất bên trong giữ lại các giá trị phù hợp từ cả hai khung dữ liệu và loại bỏ các giá trị không phù hợp.

2.4 Hợp nhất bên ngoài (outer merge)

Loại hợp nhất bên ngoài giữ lại tất cả các giá trị phù hợp và không khớp và hợp nhất các DataFrames với nhau.

 

3. Cách sử dụng hàm Concat

Hàm concat là một tùy chọn linh hoạt so với một số hàm hợp nhất khác của Python. Với chức năng concat, bạn có thể kết hợp DataFrames theo chiều dọc và chiều ngang.

Tuy nhiên, hạn chế của việc sử dụng hàm concat là nó loại bỏ mọi giá trị không khớp theo mặc định. Giống như một số hàm liên quan khác, hàm này có một số đối số, trong đó chỉ có một số đối số là cần thiết để nối thành công.

concat(dataframes, axis=0, join='outer'/inner)

Trong đó: 

  • concat là hàm hợp nhất khung dữ liệu
  • dataframes là một chuỗi các DataFrames để nối với nhau.
  • axis thể hiện hướng nối, 0 là ngang, 1 là dọc.
  • join chỉ định hợp nhất bên ngoài hoặc bên trong.

Sử dụng hai khung dữ liệu trên, bạn có thể thử hàm concat như sau:

# define the dataframes in a list format
df_merged_concat = pd.concat([df1, df2])
 
# print the results of the Concat function
print(df_merged_concat)

Sự vắng mặt của các đối số axis và join trong đoạn code trên kết hợp hai tập dữ liệu. Kết quả đầu ra có tất cả các mục nhập, bất kể trạng thái khớp.

Tương tự, bạn có thể sử dụng các đối số bổ sung để điều khiển hướng và đầu ra của hàm concat.

Để kiểm soát đầu ra với tất cả các mục nhập phù hợp:

# Concatenating all matching values between the two dataframes based on their columns
df_merged_concat = pd.concat([df1, df2], axis=1, join = 'inner')
 
print(df_merged_concat)

Kết quả chỉ chứa tất cả các giá trị phù hợp giữa hai DataFrames

>>> Đọc ngay: Tự học lập trình Python căn bản tại FUNiX vô cùng đơn giản

4. Hợp nhất DataFrames với Python

Nhờ tính linh hoạt và chức năng của chúng, khung dữ liệu là một phần không thể thiếu của Python. Với công dụng nhiều mặt của chúng, bạn có thể sử dụng chúng một cách rộng rãi để thực hiện nhiều tác vụ một cách dễ dàng nhất.

>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:

>>> Xem thêm chuỗi bài viết liên quan:

Lập trình game bằng Python đơn giản cho người mới bắt đầu

Lập trình game bằng Python là gì? 5 lợi thế Python trong lập trình game

Vai trò của Python trong phân tích dữ liệu

8 ý tưởng dự án Python phù hợp cho người mới bắt đầu

 

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/python-dataframes-merge-join/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
Chat với FUNiX GPT ×

yêu cầu gọi lại

error: Content is protected !!