Sự kết hợp dữ liệu, ghép nối và nối (Data Merging, Joining, and Concatenation) là một trong những kỹ năng quan trọng khi làm việc với dữ liệu trong Python Pandas. Sử dụng Pandas có thể giúp chúng ta tạo, sửa đổi và xử lý các tập tin dữ liệu tốt hơn trong khi thực hiện các tác vụ phân tích dữ liệu. Trong bài hướng dẫn này, chúng ta sẽ tìm hiểu cách kết hợp nhiều bảng dữ liệu trong Pandas, có nghĩa là các tập tin dữ liệu được lưu trữ trong nhiều bảng dữ liệu và chúng ta muốn kết hợp chúng.
1. Khái niệm cơ bản
Trong trường hợp đơn giản nhất, chúng ta có hai tập tin dữ liệu: một tập tin chứa thông tin về khách hàng và một tập tin chứa thông tin về đơn đặt hàng. Để kết hợp chúng thành một bảng dữ liệu, chúng ta phải tìm một cách để nối chúng.
Khi chúng ta nói về sự kết hợp các bảng dữ liệu, có ba thuật ngữ chính: “join”, “merge” và “concatenate”.
- “Join” được sử dụng khi chúng ta muốn kết hợp các bảng dữ liệu dựa trên các chỉ mục hoặc cột chung. Trong Pandas, phép nối theo join giúp chúng ta tạo một bảng mới bằng cách kết hợp các dữ liệu từ các bảng hiện có đó.
- “Merge” là cách kết hợp các bảng dữ liệu được sử dụng để kết hợp các bảng dữ liệu với nhau trên cột chung. Chúng ta sử dụng phép nối theo merge khi cần giữ nguyên cấu trúc dữ liệu trong hàng hoặc cột.
- “Concatenate” được sử dụng để nối các bảng dữ liệu với nhau dọc theo hàng hoặc cột. Điều này thường được sử dụng để kết hợp các bảng dữ liệu có cấu trúc giống nhau (các cột tương ứng cùng kiểu dữ liệu).
2. Phương pháp kết hợp
a. Merge
Phương thức merge() của Pandas được sử dụng để kết hợp dữ liệu dựa trên các cột chung của các bảng dữ liệu. Cú pháp của phương thức merge() như sau:
merged_data = pd.merge(left_dataframe, right_dataframe, on='common_column_name', how='merge_type')
Trong đó:
-
- left_dataframe và right_dataframe là hai bảng dữ liệu cần được kết hợp thành một bảng mới.
- common_column_name là tên cột chung để kết hợp dữ liệu trên hai bảng.
- merge_type sẽ quyết định loại kết hợp, bao gồm ‘inner’, ‘outer’, ‘left’, và ‘right’.
- Inner Join: Thực hiện một kết hợp bên trong (Inner Join) sẽ tạo ra một bảng dữ liệu chỉ bao gồm các hàng có cùng giá trị trong cột chung của hai bảng dữ liệu.
- Outer Join: Thực hiện một kết hợp bên ngoài (Outer Join) sẽ tạo ra một bảng dữ liệu bao gồm tất cả các hàng từ cả hai bảng dữ liệu, với các giá trị bị thiếu được thay bằng NaN hoặc giá trị mặc định.
- Left Join: Left Join tạo ra một bảng dữ liệu chứa tất cả các hàng từ left_dataframe và các hàng khớp với right_dataframe.
- Right Join: Dữ liệu được đảo ngược so với Left Join.
Hãy xem xét một ví dụ đơn giản về cách kết hợp hai bảng dữ liệu sử dụng phương thức merge.
import pandas as pd
# Tạo khung dữ liệu đầu vào
customer_data = pd.DataFrame({'id': [1, 2, 3, 4],
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47]})
order_data = pd.DataFrame({'id': [1, 1, 4, 4, 4],
'product_name': ['Chair', 'Table', 'Lamp', 'Sofa', 'TV'],
'quantity': [4, 1, 2, 3, 1]})
# Merge khung dữ liệu
merged_data = pd.merge(customer_data, order_data, on='id')
print(merged_data)
Kết quả:
id name age product_name quantity
0 1 Alice 25 Chair 4
1 1 Alice 25 Table 1
2 4 David 47 Lamp 2
3 4 David 47 Sofa 3
4 4 David 47 TV 1
Trong ví dụ này, chúng ta có hai bảng dữ liệu: customer_data và order_data. Cả hai bảng dữ liệu đều có cột “id”. Chúng ta muốn kết hợp chúng thành một bảng dữ liệu mới trên cột “id”. Bằng cách sử dụng phương thức merge() và chỉ ra tên của cột chung (trong trường hợp này là ‘id’), kết quả là một bảng mới được tạo ra.
b. Concat
Phương thức concat() của Pandas được sử dụng để nối dữ liệu theo chiều dọc hoặc ngang. Cú pháp của phương thức concat() như sau:
new_dataframe = pd.concat([df_1, df_2], axis=0/1, ignore_index=True)
- axis: mặc định là 0, tức dữ liệu sẽ được nối theo chiều dọc (vertical). Nếu axis=1, dữ liệu sẽ được nối theo chiều ngang (horizontal).
- ignore_index: mặc định là False, tức các chỉ mục trong Pandas sẽ được giữ nguyên. Nếu ignore_index=True, chỉ mục sẽ được đặt lại theo thứ tự tăng dần.
Hãy xem xét một ví dụ đơn giản về cách sử dụng phương thức concat().
import pandas as pd
# Tạo khung dữ liệu đầu vào
df_1 = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]})
df_2 = pd.DataFrame({'A': [10, 11, 12],
'B': [13, 14, 15],
'C': [16, 17, 18]})
# Nối dữ liệu theo chiều dọc
result = pd.concat([df_1, df_2], axis=0)
print(result)
Kết quả:
A B C
0 1 4 7
1 2 5 8
2 3 6 9
0 10 13 16
1 11 14 17
2 12 15 18
Trong ví dụ này, chúng ta có hai bảng dữ liệu df_1 và df_2, cả hai có cấu trúc giống nhau. Chúng ta muốn nối chúng theo chiều dọc để tạo ra một bảng dữ liệu mới. Bằng cách sử dụng phương thức concat() và chỉ ra axis=0, kết quả là một bảng được tạo ra bằng cách nối two dataframes.
c. Join
Phương thức join() của Pandas được sử dụng để kết hợp dữ liệu dựa trên các chỉ mục (index) chung của các bảng dữ liệu. Phương thức join() là một phương thức cấp cao của merge() vì nó sử dụng merge() bên trong để thực hiện kết hợp. Cú pháp của phương thức join() như sau:
new_dataframe = left_dataframe.join(right_dataframe, how='type')
-
- “Left_dataframe” và “right_dataframe” là hai bảng dữ liệu cần được kết hợp thành một bảng mới.
- “How” sẽ quyết định loại nối được thực hiện.
Tương tự các phép nối có thể được thực hiện, how có các giá trị “inner”, “outer”, “left” và “right”.
Hãy xem xét một ví dụ đơn giản về cách sử dụng phương thức join().
import pandas as pd
# Tạo khung dữ liệu đầu vào
df_1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
df_2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']})
df_3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']})
# Nối dữ liệu
result = df_1.join([df_2, df_3], how='outer')
print(result)
Kết quả:
A B C D A B C D A B C D
0 A0 B0 C0 D0 A4 B4 C4 D4 A8 B8 C8 D8
1 A1 B1 C1 D1 A5 B5 C5 D5 A9 B9 C9 D9
2 A2 B2 C2 D2 A6 B6 C6 D6 A10 B10 C10 D10
3 A3 B3 C3 D3 A7 B7 C7 D7 A11 B11 C11 D11
Trong ví dụ này, chúng ta có ba bảng dữ liệu df_1, df_2 và df_3. Cả ba bảng dữ liệu đều có cấu trúc giống nhau. Chúng ta muốn nối chúng lại với nhau theo chỉ mục để tạo ra một bảng dữ liệu mới. Bằng cách sử dụng phương thức join() và chỉ ra những bảng dữ liệu làm đầu vào trong danh sách, kết quả là một bảng dữ liệu mới được tạo ra.
Thêm một số lưu ý về phương pháp kết hợp dữ liệu trong Python Pandas:
- Các bảng dữ liệu cần được có cấu trúc tương tự (cùng số lượng cột, tên cột giống nhau hoặc có cấu trúc tương đồng).
- Sau khi kết hợp, chúng ta cần kiểm tra kết quả để đảm bảo tính hợp lệ của nhiều bảng dữ liệu đã được kết hợp.
- Chúng ta nên sử dụng phương pháp merge() hoặc join() để nối các bảng dữ liệu khi chúng ta muốn giữ nguyên cấu trúc dữ liệu của các cột hoặc hàng.
- Nếu các bảng dữ liệu có cấu trúc khác nhau, chúng ta có thể phải sử dụng một phương pháp khác để nối chúng.
Học bài tiếp theo: Reshaping Data with pandas: Học cách thay đổi cấu trúc và phân tích dữ liệu dễ dàng hơn
Bài trước: Phân nhóm và Tính toán dữ liệu với Pandas
Quay về trang chủ của khoá học: Python Pandas – Thao tác và phân tích dữ liệu
