Chuyển đến nội dung chính

Join DataFrame trong pandas: merge(), concat() & join()

Tìm hiểu cách join và merge DataFrame trong pandas bằng concat(), merge() và join() với các ví dụ thực tế.
Đã cập nhật 5 thg 6, 2026  · 13 phút đọc

Bạn đã từng thử giải một thử thách trên Kaggle chưa? Nếu có, bạn có thể nhận ra rằng trong phần lớn thử thách, dữ liệu được cung cấp dưới dạng nhiều tệp, với một số cột xuất hiện ở hơn một tệp. Vậy, điều đầu tiên xuất hiện trong đầu bạn là gì? Tất nhiên là nối chúng lại!

Trong hướng dẫn này, bạn sẽ thực hành một vài kỹ thuật nối chuẩn trong pandas. Cụ thể hơn, bạn sẽ học cách:

  • Nối (concatenate) các DataFrame theo hàng và theo cột.
  • Gộp (merge) các DataFrame theo các khóa cụ thể bằng các kiểu nối khác nhau như left-join, inner-join, v.v.
  • Join các DataFrame theo chỉ mục (index).
  • Thực hiện các phép gộp thân thiện với chuỗi thời gian (time-series) do pandas cung cấp

Trong quá trình thực hiện, bạn cũng sẽ học một vài mẹo cần thiết trước và sau khi nối.

TL;DR

  • Dùng pd.concat() để xếp chồng DataFrame theo chiều dọc (hàng) hoặc chiều ngang (cột)
  • Dùng pd.merge() để gộp DataFrame theo các cột chung, tương tự như các phép join trong SQL
  • Chỉ định kiểu join với tham số how: 'inner', 'outer', 'left', hoặc 'right'
  • Dùng .join() để join DataFrame dựa trên chỉ mục
  • Dùng pd.merge_asof() cho dữ liệu chuỗi thời gian khi bạn cần khớp khóa gần nhất

pandas Joining

Nối và gộp các DataFrame là quá trình cốt lõi để bắt đầu phân tích dữ liệu và thực hiện các tác vụ học máy. Đây là một trong những bộ công cụ mà mọi Chuyên viên Phân tích Dữ liệu hoặc Nhà Khoa học Dữ liệu cần thành thạo, vì trong hầu hết các trường hợp, dữ liệu đến từ nhiều nguồn và tệp khác nhau. Bạn có thể cần đưa tất cả dữ liệu về một chỗ bằng một số logic join rồi mới bắt đầu phân tích. Những người làm việc với SQL joins hẳn hiểu tầm quan trọng của tác vụ này. Ngay cả khi bạn muốn xây dựng một số mô hình học máy trên một bộ dữ liệu nào đó, bạn có thể cần gộp nhiều tệp csv lại thành một DataFrame duy nhất.

May mắn là bạn có thư viện phổ biến nhất trong Python, pandas, để hỗ trợ! pandas cung cấp nhiều tiện ích để dễ dàng kết hợp Series và DataFrame với nhiều dạng logic tập hợp cho chỉ mục và chức năng đại số quan hệ trong các thao tác kiểu join/merge.

Chạy và chỉnh sửa mã từ hướng dẫn trực tuyến này.

Chạy mã

pandas Concatenate

Bắt đầu bằng cách import thư viện bạn sẽ dùng xuyên suốt hướng dẫn: pandas

import pandas as pd

Bạn sẽ thực hiện tất cả thao tác trong hướng dẫn này trên các DataFrame giả lập do bạn tạo. Để tạo một DataFrame, bạn có thể dùng một từ điển (dictionary) Python như sau:

dummy_data1 = {
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', 'C', 'E', 'G', 'I'],
        'Feature2': ['B', 'D', 'F', 'H', 'J']}

Ở đây, các khóa của từ điển dummy_data1 là tên cột, và các giá trị trong danh sách là dữ liệu tương ứng với mỗi quan sát hay mỗi hàng. Để chuyển cấu trúc này thành một DataFrame của pandas, bạn sẽ dùng hàm DataFrame() của pandas, kèm tham số columns để đặt tên các cột:

df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2'])

df1
  id Feature1 Feature2
0 1 A B
1 2 C D
2 3 E F
3 4 G H
4 5 I J

Như bạn thấy, giờ bạn có một DataFrame với ba cột id, Feature1 và Feature2. Có một cột không tên bổ sung mà pandas tự tạo làm nhãn hàng (row labels). Tương tự DataFrame df1 ở trên, bạn sẽ tạo thêm hai DataFrame df2 và df3:

dummy_data2 = {
        'id': ['1', '2', '6', '7', '8'],
        'Feature1': ['K', 'M', 'O', 'Q', 'S'],
        'Feature2': ['L', 'N', 'P', 'R', 'T']}
df2 = pd.DataFrame(dummy_data2, columns = ['id', 'Feature1', 'Feature2'])

df2
  id Feature1 Feature2
0 1 K L
1 2 M N
2 6 O P
3 7 Q R
4 8 S T
dummy_data3 = {
        'id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
        'Feature3': [12, 13, 14, 15, 16, 17, 15, 12, 13, 23]}
df3 = pd.DataFrame(dummy_data3, columns = ['id', 'Feature3'])

df3
  id Feature3
0 1 12
1 2 13
2 3 14
3 4 15
4 5 16
5 7 17
6 8 15
7 9 12
8 10 13
9 11 23

 concat()

Để đơn giản nối các DataFrame theo hàng, bạn có thể dùng hàm concat() trong pandas. Bạn sẽ cần truyền tên các DataFrame trong một danh sách làm đối số cho hàm concat():

df_row = pd.concat([df1, df2])

df_row
  id Feature1 Feature2
0 1 A B
1 2 C D
2 3 E F
3 4 G H
4 5 I J
0 1 K L
1 2 M N
2 6 O P
3 7 Q R
4 8 S T

Bạn có thể thấy hai DataFrame df1 và df2 đã được nối lại thành một DataFrame df_row theo hàng. Tuy nhiên, các nhãn hàng có vẻ chưa đúng. Nếu bạn muốn các nhãn hàng tự động điều chỉnh theo phép nối, bạn cần đặt đối số ignore_index là True khi gọi hàm concat():

df_row_reindex = pd.concat([df1, df2], ignore_index=True)

df_row_reindex
  id Feature1 Feature2
0 1 A B
1 2 C D
2 3 E F
3 4 G H
4 5 I J
5 1 K L
6 2 M N
7 6 O P
8 7 Q R
9 8 S T

Bây giờ các nhãn hàng đã đúng!

pandas cũng cung cấp cho bạn tùy chọn gắn nhãn các DataFrame sau khi nối bằng một key để bạn biết dữ liệu nào đến từ DataFrame nào. Bạn có thể làm điều này bằng cách truyền đối số bổ sung keys, chỉ định tên nhãn của các DataFrame trong một danh sách. Ở đây bạn sẽ thực hiện lại phép nối với keys là x và y tương ứng cho df1 và df2.

frames = [df1,df2]
df_keys = pd.concat(frames, keys=['x', 'y'])

df_keys
    id Feature1 Feature2
x 0 1 A B
1 2 C D
2 3 E F
3 4 G H
4 5 I J
y 0 1 K L
1 2 M N
2 6 O P
3 7 Q R
4 8 S T

Việc đề cập keys cũng giúp dễ dàng truy xuất dữ liệu tương ứng với một DataFrame cụ thể. Bạn có thể lấy dữ liệu của DataFrame df2 có nhãn y bằng phương thức loc:

df_keys.loc['y']
  id Feature1 Feature2
0 1 K L
1 2 M N
2 6 O P
3 7 Q R
4 8 S T

Bạn cũng có thể truyền một từ điển vào concat(); trong trường hợp đó, các khóa của từ điển sẽ được dùng cho đối số keys (trừ khi bạn chỉ định keys khác):

pieces = {'x': df1, 'y': df2}

df_piece = pd.concat(pieces)

df_piece
    id Feature1 Feature2
x 0 1 A B
1 2 C D
2 3 E F
3 4 G H
4 5 I J
y 0 1 K L
1 2 M N
2 6 O P
3 7 Q R
4 8 S T

Đáng lưu ý là concat() sẽ tạo một bản sao đầy đủ của dữ liệu, và việc dùng lại hàm này liên tục có thể gây sụt giảm hiệu năng đáng kể. Với các thao tác dữ liệu quy mô lớn, hãy cân nhắc tìm hiểu pandas 2.0 so với polars cho xử lý dữ liệu hiệu năng cao. Nếu bạn cần dùng thao tác này trên nhiều tập dữ liệu, hãy dùng list comprehension.

frames = [ process_your_file(f) for f in files ]
result = pd.concat(frames)

Để nối các DataFrame theo cột, bạn có thể chỉ định tham số axis là 1:

df_col = pd.concat([df1,df2], axis=1)

df_col
  id Feature1 Feature2 id Feature1 Feature2
0 1 A B 1 K L
1 2 C D 2 M N
2 3 E F 6 O P
3 4 G H 7 Q R
4 5 I J 8 S T

pandas Merge DataFrames

Một thao tác phổ biến khác liên quan đến DataFrame là gộp (merge). Hai DataFrame có thể chứa các loại thông tin khác nhau về cùng một thực thể và được liên kết bằng một số đặc trưng/cột chung. Để join các DataFrame này, pandas cung cấp nhiều hàm như concat(), merge(), join(), v.v. Ở phần này, bạn sẽ thực hành dùng hàm merge() của pandas.

Bạn có thể join các DataFrame df_row (được tạo bằng cách nối df1 và df2 theo hàng) và df3 trên cột chung (hay khóa) id. Để làm vậy, truyền tên các DataFrame và đối số bổ sung on là tên cột chung, ở đây là id, vào hàm merge():

df_merge_col = pd.merge(df_row, df3, on='id')

df_merge_col
  id Feature1 Feature2 Feature3
0 1 A B 12
1 1 K L 12
2 2 C D 13
3 2 M N 13
4 3 E F 14
5 4 G H 15
6 5 I J 16
7 7 Q R 17
8 8 S T 15

Bạn có thể thấy các DataFrame đã được gộp thành một DataFrame duy nhất dựa trên các giá trị chung trong cột id của cả hai DataFrame. Ví dụ, ở đây id giá trị 1 xuất hiện kèm A, B và K, L trong DataFrame df_row nên id này lặp lại hai lần trong DataFrame cuối df_merge_col với giá trị 12 của Feature3 (đến từ df3) cũng lặp lại.

Có thể xảy ra trường hợp cột bạn muốn dùng để merge có tên khác nhau (không như ví dụ này). Với các phép gộp như vậy, bạn sẽ cần chỉ định các đối số left_on là tên cột ở DataFrame bên trái và right_on là tên cột ở DataFrame bên phải, như sau:

df_merge_difkey = pd.merge(df_row, df3, left_on='id', right_on='id')

df_merge_difkey
  id Feature1 Feature2 Feature3
0 1 A B 12
1 1 K L 12
2 2 C D 13
3 2 M N 13
4 3 E F 14
5 4 G H 15
6 5 I J 16
7 7 Q R 17
8 8 S T 15

Bạn cũng có thể thêm hàng vào một DataFrame bằng pd.concat(). Trước tiên, tạo một DataFrame mới chứa dữ liệu hàng, sau đó nối nó với DataFrame gốc:

add_row = pd.DataFrame([['10', 'X1', 'X2', 'X3']], 
                       columns=['id', 'Feature1', 'Feature2', 'Feature3'])

df_add_row = pd.concat([df_merge_col, add_row], ignore_index=True)

df_add_row
  id Feature1 Feature2 Feature3
0 1 A B 12
1 1 K L 12
2 2 C D 13
3 2 M N 13
4 3 E F 14
5 4 G H 15
6 5 I J 16
7 7 Q R 17
8 8 S T 15
9 10 X1 X2 X3

Các kiểu Join trong pandas

Ở phần này, bạn sẽ thực hành các logic join khác nhau để gộp các DataFrame của pandas dựa trên một cột/khóa chung. Logic đằng sau các phép join này về cơ bản giống với SQL khi bạn join các bảng. Nếu bạn quen với inner vs outer join trong SQL, bạn sẽ thấy các khái niệm này rất quen thuộc.

Join Type SQL Equivalent Result Use Case
inner INNER JOIN Chỉ các hàng khớp từ cả hai DataFrame Khi bạn chỉ muốn các bản ghi tồn tại ở cả hai bảng
left LEFT OUTER JOIN Tất cả hàng từ bảng trái + các khớp từ bảng phải Giữ mọi bản ghi từ DataFrame chính
right RIGHT OUTER JOIN Tất cả hàng từ bảng phải + các khớp từ bảng trái Giữ mọi bản ghi từ DataFrame phụ
outer FULL OUTER JOIN Tất cả hàng từ cả hai DataFrame Khi bạn cần hợp nhất đầy đủ cả hai bảng

Full Outer Join

FULL OUTER JOIN kết hợp kết quả của cả left và right outer join. DataFrame sau khi join sẽ chứa mọi bản ghi từ cả hai DataFrame và điền giá trị NaN cho các khớp thiếu ở bất kỳ phía nào. Bạn có thể thực hiện full outer join bằng cách chỉ định đối số how là outer trong hàm merge():

df_outer = pd.merge(df1, df2, on='id', how='outer')

df_outer
  id Feature1_x Feature2_x Feature1_y Feature2_y
0 1 A B K L
1 2 C D M N
2 3 E F NaN NaN
3 4 G H NaN NaN
4 5 I J NaN NaN
5 6 NaN NaN O P
6 7 NaN NaN Q R
7 8 NaN NaN S T

Bạn có thể thấy DataFrame kết quả có tất cả bản ghi từ cả hai bảng với các giá trị NaN cho các khớp thiếu ở mỗi phía. Tuy nhiên, còn một điểm nữa là hậu tố được thêm vào tên cột để thể hiện cột nào đến từ DataFrame nào. Hậu tố mặc định là x và y, nhưng bạn có thể thay đổi bằng cách chỉ định đối số suffixes trong hàm merge():

df_suffix = pd.merge(df1, df2, left_on='id',right_on='id',how='outer',suffixes=('_left','_right'))

df_suffix
  id Feature1_left Feature2_left Feature1_right Feature2_right
0 1 A B K L
1 2 C D M N
2 3 E F NaN NaN
3 4 G H NaN NaN
4 5 I J NaN NaN
5 6 NaN NaN O P
6 7 NaN NaN Q R
7 8 NaN NaN S T

Inner Join

INNER JOIN chỉ tạo ra tập các bản ghi khớp ở cả DataFrame A và DataFrame B. Bạn cần truyền inner vào đối số how của hàm merge() để thực hiện inner join:

df_inner = pd.merge(df1, df2, on='id', how='inner')

df_inner
  id Feature1_x Feature2_x Feature1_y Feature2_y
0 1 A B K L
1 2 C D M N

Right Join

RIGHT JOIN tạo ra toàn bộ tập bản ghi từ DataFrame B (DataFrame bên phải), kèm các bản ghi khớp (nếu có) từ DataFrame A (DataFrame bên trái). Nếu không có khớp, phía phải sẽ chứa giá trị null. Bạn cần truyền right vào đối số how của hàm merge() để thực hiện right join:

df_right = pd.merge(df1, df2, on='id', how='right')

df_right
  id Feature1_x Feature2_x Feature1_y Feature2_y
0 1 A B K L
1 2 C D M N
2 6 NaN NaN O P
3 7 NaN NaN Q R
4 8 NaN NaN S T

Left Join

LEFT JOIN tạo ra toàn bộ tập bản ghi từ DataFrame A (DataFrame bên trái), kèm các bản ghi khớp (nếu có) từ DataFrame B (DataFrame bên phải). Nếu không có khớp, phía trái sẽ chứa giá trị null. Bạn cần truyền left vào đối số how của hàm merge() để thực hiện left join:

df_left = pd.merge(df1, df2, on='id', how='left')

df_left
  id Feature1_x Feature2_x Feature1_y Feature2_y
0 1 A B K L
1 2 C D M N
2 3 E F NaN NaN
3 4 G H NaN NaN
4 5 I J NaN NaN

Joining theo chỉ mục (index)

Đôi khi bạn cần thực hiện join dựa trên chỉ mục hay nhãn hàng. Để làm vậy, bạn phải chỉ định right_index (cho chỉ mục của DataFrame bên phải) và left_index (cho chỉ mục của DataFrame bên trái) là True:

df_index = pd.merge(df1, df2, right_index=True, left_index=True)

df_index
  id_x Feature1_x Feature2_x id_y Feature1_y Feature2_y
0 1 A B 1 K L
1 2 C D 2 M N
2 3 E F 6 O P
3 4 G H 7 Q R
4 5 I J 8 S T

pandas Join

Phương thức DataFrame.join() của pandas được dùng để join các DataFrame trên các chỉ mục duy nhất. Bạn có thể dùng đối số tùy chọn `on` để join tên cột theo chỉ mục, và đối số how để điều khiển kiểu thao tác giữa hai đối tượng. Mặc định, nó sẽ dùng inner join. 

pandas Join hai DataFrame

Hãy join hai data frame bằng .join. Chúng ta cung cấp `lsuffix` và `rsuffix` để tránh lỗi trùng tên cột. Lưu ý phép join dựa trên chỉ mục, không dựa trên cột, nên chúng ta cần hoặc đổi cột ‘id’ hoặc cung cấp hậu tố.

df2.join(df3, lsuffix='_left', rsuffix='_right')

  id_left Feature1 Feature2 id_right Feature3
0 1 K L 1 12
1 2 M N 2 13
2 6 O P 3 14
3 7 Q R 4 15
4 8 S T 5 16

Chúng ta cũng có thể join các cột trên chỉ mục bằng đối số `on`. Để áp dụng join thành công, ta cần đặt cột ‘id’ của df3 làm chỉ mục và truyền đối số `on` với cột ‘id’. Mặc định, nó sẽ dùng left join.   

df2.join(df3.set_index('id'), on='id')

  id Feature1 Feature2 Feature3
0 1 K L 12.0
1 2 M N 13.0
2 6 O P NaN
3 7 Q R 17.0
4 8 S T 15.0

Tương tự hàm merge, chúng ta có thể thay đổi kiểu join bằng cách cung cấp đối số `how`. Ở đây, chúng ta sẽ dùng inner join. 

df2.join(df3.set_index('id'), on='id', how = "inner")

  id_left Feature1 Feature2 Feature3
0 1 K L 12
1 2 M N 13
3 7 Q R 17
4 8 S T 15

Gộp thân thiện với chuỗi thời gian

pandas cung cấp các hàm đặc biệt để gộp các DataFrame chuỗi thời gian. Có lẽ hữu ích và phổ biến nhất là hàm merge_asof(). merge_asof() tương tự một phép left-join có thứ tự, ngoại trừ việc bạn khớp theo khóa gần nhất thay vì khóa bằng nhau. Với mỗi hàng ở DataFrame bên trái, bạn chọn hàng cuối cùng ở DataFrame bên phải có khóa on nhỏ hơn khóa ở phía trái. Cả hai DataFrame phải được sắp xếp theo khóa.

Tùy chọn, một phép asof merge có thể thực hiện gộp theo nhóm. Phép này sẽ khớp khóa by một cách chính xác, ngoài phần khớp gần nhất theo khóa on.

Ví dụ, bạn có thể có bảng giao dịch (trades) và báo giá (quotes), và bạn muốn gộp asof chúng. Ở đây DataFrame bên trái là trades và bên phải là quotes. Chúng được gộp asof theo khóa time và gộp theo nhóm theo mã cổ phiếu (ticker).

trades = pd.DataFrame({
    'time': pd.to_datetime(['20160525 13:30:00.023',
                            '20160525 13:30:00.038',
                            '20160525 13:30:00.048',
                            '20160525 13:30:00.048',
                            '20160525 13:30:00.048']),
    'ticker': ['MSFT', 'MSFT','GOOG', 'GOOG', 'AAPL'],
    'price': [51.95, 51.95,720.77, 720.92, 98.00],
    'quantity': [75, 155,100, 100, 100]},
    columns=['time', 'ticker', 'price', 'quantity'])

quotes = pd.DataFrame({
    'time': pd.to_datetime(['20160525 13:30:00.023',
                            '20160525 13:30:00.023',
                            '20160525 13:30:00.030',
                            '20160525 13:30:00.041',
                            '20160525 13:30:00.048',
                            '20160525 13:30:00.049',
                            '20160525 13:30:00.072',
                            '20160525 13:30:00.075']),
    'ticker': ['GOOG', 'MSFT', 'MSFT','MSFT', 'GOOG', 'AAPL', 'GOOG','MSFT'],
    'bid': [720.50, 51.95, 51.97, 51.99,720.50, 97.99, 720.50, 52.01],
    'ask': [720.93, 51.96, 51.98, 52.00,720.93, 98.01, 720.88, 52.03]},
    columns=['time', 'ticker', 'bid', 'ask'])
trades
  time ticker price quantity
0 2016-05-25 13:30:00.023 MSFT 51.95 75
1 2016-05-25 13:30:00.038 MSFT 51.95 155
2 2016-05-25 13:30:00.048 GOOG 720.77 100
3 2016-05-25 13:30:00.048 GOOG 720.92 100
4 2016-05-25 13:30:00.048 AAPL 98.00 100
quotes
  time ticker bid ask
0 2016-05-25 13:30:00.023 GOOG 720.50 720.93
1 2016-05-25 13:30:00.023 MSFT 51.95 51.96
2 2016-05-25 13:30:00.030 MSFT 51.97 51.98
3 2016-05-25 13:30:00.041 MSFT 51.99 52.00
4 2016-05-25 13:30:00.048 GOOG 720.50 720.93
5 2016-05-25 13:30:00.049 AAPL 97.99 98.01
6 2016-05-25 13:30:00.072 GOOG 720.50 720.88
7 2016-05-25 13:30:00.075 MSFT 52.01 52.03
df_merge_asof = pd.merge_asof(trades, quotes,
              on='time',
              by='ticker')

df_merge_asof
  time ticker price quantity bid ask
0 2016-05-25 13:30:00.023 MSFT 51.95 75 51.95 51.96
1 2016-05-25 13:30:00.038 MSFT 51.95 155 51.97 51.98
2 2016-05-25 13:30:00.048 GOOG 720.77 100 720.50 720.93
3 2016-05-25 13:30:00.048 GOOG 720.92 100 720.50 720.93
4 2016-05-25 13:30:00.048 AAPL 98.00 100 NaN NaN

Nếu quan sát kỹ, bạn có thể thấy lý do xuất hiện NaN ở hàng mã AAPL. Do DataFrame bên phải quotes không có giá trị time nào nhỏ hơn 13:30:00.048 (thời gian ở bảng bên trái) cho mã AAPL, nên NaN được đưa vào các cột bid và ask.

Bạn cũng có thể đặt một ngưỡng (tolerance) xác định trước cho cột thời gian. Giả sử bạn chỉ muốn gộp asof trong phạm vi 2ms giữa thời điểm báo giá và thời điểm giao dịch, thì bạn cần chỉ định đối số tolerance:

df_merge_asof_tolerance = pd.merge_asof(trades, quotes,
              on='time',
              by='ticker',
              tolerance=pd.Timedelta('2ms'))

df_merge_asof_tolerance
  time ticker price quantity bid ask
0 2016-05-25 13:30:00.023 MSFT 51.95 75 51.95 51.96
1 2016-05-25 13:30:00.038 MSFT 51.95 155 NaN NaN
2 2016-05-25 13:30:00.048 GOOG 720.77 100 720.50 720.93
3 2016-05-25 13:30:00.048 GOOG 720.92 100 720.50 720.93
4 2016-05-25 13:30:00.048 AAPL 98.00 100 NaN NaN

Lưu ý sự khác biệt giữa kết quả trên và trước đó. Các hàng sẽ không được gộp nếu độ lệch thời gian không thỏa mãn 2ms.

Kết luận

Trong hướng dẫn này, bạn đã học cách nối và gộp các DataFrame dựa trên nhiều logic bằng các hàm concat() và merge() của thư viện pandas. Ở phần cuối, bạn cũng đã thực hành hàm đặc biệt merge_asof() để gộp các DataFrame chuỗi thời gian. Trong suốt quá trình, bạn cũng học cách làm việc với chỉ mục của DataFrame. Còn rất nhiều lựa chọn khác bạn có thể khám phá để join DataFrame trong pandas, và chúng tôi khuyến khích bạn tham khảo tài liệu tuyệt vời của nó. Chúc bạn khám phá vui vẻ!

Hướng dẫn này tham khảo tài liệu pandas để biên soạn.

Nếu bạn muốn học thêm về pandas, hãy tham gia khóa Data Manipulation with pandas của DataCamp và xem Hướng dẫn DataFrame trong Python Pandas của chúng tôi.

DataCamp cũng có một số hướng dẫn pandas hữu ích khác bao gồm:

Chúc bạn học tốt!

FAQs

Sự khác nhau giữa merge() và join() trong pandas là gì?

merge() linh hoạt hơn và có thể join các DataFrame trên bất kỳ cột nào, tương tự các phép join trong SQL. join() chủ yếu được thiết kế để join theo chỉ mục và là một phương thức tiện lợi gọi merge() bên trong. Hãy dùng merge() khi join theo cột, và join() khi khóa join đã được đặt làm chỉ mục.

Làm thế nào để merge DataFrame theo nhiều cột trong pandas?

Truyền một danh sách tên cột vào tham số on: pd.merge(df1, df2, on=['col1', 'col2']). Nếu tên cột khác nhau giữa các DataFrame, dùng left_onright_on với danh sách: pd.merge(df1, df2, left_on=['a', 'b'], right_on=['c', 'd']).

Điều gì xảy ra với giá trị thiếu khi merge DataFrame?

Hành vi phụ thuộc vào kiểu join. Với inner join, các hàng không khớp sẽ bị loại. Với left, right hoặc outer join, các hàng không khớp được giữ lại và điền NaN ở các cột từ DataFrame kia. Bạn có thể xử lý chúng bằng fillna() hoặc dropna() sau khi merge.

Khi nào nên dùng concat() so với merge() trong pandas?

Dùng concat() để xếp chồng DataFrame theo chiều dọc (thêm hàng) hoặc chiều ngang (thêm cột) dựa trên căn chỉnh chỉ mục. Dùng merge() khi bạn cần kết hợp DataFrame dựa trên các giá trị cột chung, tương tự join trong SQL. Hãy coi concat() như "dán" các DataFrame với nhau, còn merge() dành cho join quan hệ.

Xử lý tên cột trùng sau khi merge trong pandas như thế nào?

Mặc định, pandas thêm hậu tố _x_y vào các tên cột trùng. Tùy chỉnh bằng tham số suffixes: pd.merge(df1, df2, on='id', suffixes=('_left', '_right')). Sau khi merge, bạn có thể đổi tên cột bằng df.rename(columns={'old': 'new'}) hoặc loại cột trùng bằng df.drop(columns=['col_y']).

Sự khác nhau giữa merge() và join() trong pandas là gì?

merge() linh hoạt hơn và có thể join các DataFrame trên bất kỳ cột nào, tương tự các phép join trong SQL. join() chủ yếu được thiết kế để join theo chỉ mục và là một phương thức tiện lợi gọi merge() bên trong. Hãy dùng merge() khi join theo cột, và join() khi khóa join đã được đặt làm chỉ mục.

Làm thế nào để merge DataFrame theo nhiều cột trong pandas?

Truyền một danh sách tên cột vào tham số on: pd.merge(df1, df2, on=['col1', 'col2']). Nếu tên cột khác nhau giữa các DataFrame, dùng left_onright_on với danh sách: pd.merge(df1, df2, left_on=['a', 'b'], right_on=['c', 'd']).

Điều gì xảy ra với giá trị thiếu khi merge DataFrame?

Hành vi phụ thuộc vào kiểu join. Với inner join, các hàng không khớp sẽ bị loại. Với left, right hoặc outer join, các hàng không khớp được giữ lại và điền NaN ở các cột từ DataFrame kia. Bạn có thể xử lý chúng bằng fillna() hoặc dropna() sau khi merge.

Khi nào nên dùng concat() so với merge() trong pandas?

Dùng concat() để xếp chồng DataFrame theo chiều dọc (thêm hàng) hoặc chiều ngang (thêm cột) dựa trên căn chỉnh chỉ mục. Dùng merge() khi bạn cần kết hợp DataFrame dựa trên các giá trị cột chung, tương tự join trong SQL. Hãy coi concat() như "dán" các DataFrame với nhau, còn merge() dành cho join quan hệ.

Xử lý tên cột trùng sau khi merge trong pandas như thế nào?

Mặc định, pandas thêm hậu tố _x_y vào các tên cột trùng. Tùy chỉnh bằng tham số suffixes: pd.merge(df1, df2, on='id', suffixes=('_left', '_right')). Sau khi merge, bạn có thể đổi tên cột bằng df.rename(columns={'old': 'new'}) hoặc loại cột trùng bằng df.drop(columns=['col_y']).

Chủ đề

Tìm hiểu thêm về Python và pandas

Courses

Ghép nối dữ liệu bằng Pandas dành cho người dùng bảng tính

4 giờ
4.5K
Tìm hiểu cách kết hợp các tập dữ liệu ở định dạng bảng một cách hiệu quả và nhanh chóng bằng thư viện Pandas của Python.
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow