Làm cách nào để nối hai bảng trong Python?

Có nhiều cách để tham gia, nối và hợp nhất dữ liệu bằng Pandas. Tuy nhiên, tất cả phụ thuộc vào trường hợp sử dụng của bạn. Đối với các ví dụ bên dưới, chúng tôi sẽ sử dụng ví dụ về một cửa hàng dưa chua hợp nhất dữ liệu của họ với một cửa hàng kem để tạo một khung dữ liệu duy nhất. Hãy cùng xem ví dụ đầu tiên về việc hợp nhất hai khung dữ liệu

Sử dụng dữ liệu Hợp nhất Pandas trên khóa id chung.  

Đây là dữ liệu của chúng tôi về giá cả và các mặt hàng. chúng tôi sẽ pd. hợp nhất để tạo một khung dữ liệu duy nhất từ ​​​​hai bảng. Trong ví dụ bên dưới, chúng ta sẽ sử dụng phép nối trái để hợp nhất hai bảng của chúng ta

Bảng 1. hợp nhất (bảng2, on = 'id chung', cách = 'trái')

Làm cách nào để nối hai bảng trong Python?

#merging data frames with merge function in pandas
# load in the various tables from an excel document
items = pd.read_excel('Shop_Merger.xlsx',sheet_name='Pickle Items')
prices = pd.read_excel('Shop_Merger.xlsx',sheet_name='Pickle Prices')
nmerge = items.merge(prices, on='Item_id', how='left')

Đây là cách hợp nhất dễ dàng nhất mà bạn có thể thực hiện bằng chức năng hợp nhất của Pandas. Đánh giá mã bên dưới để xem cách chúng tôi đã nhập và thêm dữ liệu bằng cách sử dụng hàm hợp nhất trên một id chung của Item_id được tìm thấy trên cả hai bảng

Một biến thể của mã này bên phải và các phím. Điều này về cơ bản sẽ cung cấp cho bạn kết quả tương tự

#merging with a two different keys
merge = items.merge(price, left_on='Item_id',right_on='Item_id')

Hợp nhất  hoặc Nối các bảng bằng cách sử dụng pd. concat() theo hàng hoặc cột

các pd. hàm concat cho phép bạn lập bảng bằng cách sử dụng cột và hoặc hàng. Chức năng này sẽ cho phép bạn nối hai bảng bằng cách xếp chồng chúng lên nhau theo các cột chung hoặc nối chúng

Các đối tượng

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
2 và
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
3 trong pandas là những công cụ mạnh mẽ để khám phá và phân tích dữ liệu. Một phần sức mạnh của họ đến từ cách tiếp cận nhiều mặt để kết hợp các bộ dữ liệu riêng biệt. Với gấu trúc, bạn có thể hợp nhất, tham gia và nối các bộ dữ liệu của mình, cho phép bạn thống nhất và hiểu rõ hơn về dữ liệu của mình khi phân tích dữ liệu đó

Trong hướng dẫn này, bạn sẽ tìm hiểu cách thức và thời điểm kết hợp dữ liệu của mình trong pandas với

  • >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    4 để kết hợp dữ liệu trên các cột hoặc chỉ mục chung
  • >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    5 để kết hợp dữ liệu trên một cột chính hoặc một chỉ mục
  • >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    6 để kết hợp DataFrames trên các hàng hoặc cột

Nếu bạn có một số kinh nghiệm sử dụng các đối tượng

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
3 và
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
2 trong gấu trúc và bạn đã sẵn sàng học cách kết hợp chúng, thì hướng dẫn này sẽ giúp bạn thực hiện chính xác điều đó. Nếu bạn cảm thấy hơi mệt mỏi, thì bạn có thể xem phần giới thiệu nhanh về DataFrames trước khi tiếp tục

Bạn có thể làm theo các ví dụ trong hướng dẫn này bằng cách sử dụng Jupyter Notebook tương tác và các tệp dữ liệu có sẵn tại liên kết bên dưới

Tải xuống sổ ghi chép và tập dữ liệu. Nhấp vào đây để lấy bộ dữ liệu Jupyter Notebook và CSV mà bạn sẽ sử dụng để tìm hiểu về Pandas merge(),. tham gia () và concat () trong hướng dẫn này

Ghi chú. Các kỹ thuật mà bạn sẽ tìm hiểu bên dưới thường sẽ hoạt động cho cả đối tượng

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
3 và
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
2. Nhưng để đơn giản và ngắn gọn, các ví dụ sẽ sử dụng thuật ngữ tập dữ liệu để chỉ các đối tượng có thể là DataFrames hoặc Series

gấu trúc >>> climate_temp.shape (127020, 21) >>> climate_precip.shape (151110, 29) 4. Kết hợp dữ liệu trên các cột hoặc chỉ số chung

Kỹ thuật đầu tiên mà bạn sẽ học là

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4. Bạn có thể sử dụng
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 bất cứ lúc nào bạn muốn chức năng tương tự như thao tác nối của cơ sở dữ liệu. Đây là thao tác linh hoạt nhất trong ba thao tác mà bạn sẽ học

Khi bạn muốn kết hợp các đối tượng dữ liệu dựa trên một hoặc nhiều khóa, tương tự như những gì bạn làm trong cơ sở dữ liệu quan hệ, thì

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 là công cụ bạn cần. Cụ thể hơn,
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 hữu ích nhất khi bạn muốn kết hợp các hàng chia sẻ dữ liệu

Bạn có thể đạt được cả liên kết nhiều-một và nhiều-nhiều với

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4. Trong liên kết nhiều thành một, một trong các tập dữ liệu của bạn sẽ có nhiều hàng trong cột hợp nhất lặp lại các giá trị giống nhau. Ví dụ: các giá trị có thể là 1, 1, 3, 5 và 5. Đồng thời, cột hợp nhất trong tập dữ liệu khác sẽ không có giá trị lặp lại. Lấy 1, 3 và 5 làm ví dụ

Như bạn có thể đoán, trong phép nối nhiều-nhiều, cả hai cột hợp nhất của bạn sẽ có các giá trị lặp lại. Các phép hợp nhất này phức tạp hơn và dẫn đến tích Descartes của các hàng đã nối

Điều này có nghĩa là sau khi hợp nhất, bạn sẽ có mọi tổ hợp hàng có cùng giá trị trong cột chính. Bạn sẽ thấy điều này trong hành động ở bên dưới

Điều làm cho

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 trở nên linh hoạt là vô số tùy chọn để xác định hành vi hợp nhất của bạn. Mặc dù danh sách này có vẻ khó khăn, nhưng với thực tế, bạn sẽ có thể hợp nhất các loại tập dữ liệu một cách thành thạo

Khi bạn sử dụng

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4, bạn sẽ cung cấp hai đối số bắt buộc

  1. Khung dữ liệu
    >>> precip_one_station = climate_precip.query("STATION == 'GHCND:USC00045721'")
    >>> precip_one_station.head()
                    STATION  .. DLY-SNOW-PCTALL-GE050TI
    1460  GHCND:USC00045721  ..                   -9999
    1461  GHCND:USC00045721  ..                   -9999
    1462  GHCND:USC00045721  ..                   -9999
    1463  GHCND:USC00045721  ..                   -9999
    1464  GHCND:USC00045721  ..                   -9999
    
    9
  2. Khung dữ liệu
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    0

Sau đó, bạn có thể cung cấp một số đối số tùy chọn để xác định cách hợp nhất các bộ dữ liệu của mình

  • >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    1 xác định loại hợp nhất cần thực hiện. Nó mặc định là
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    2, nhưng các tùy chọn khả thi khác bao gồm
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    3,
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    4 và
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    5

  • >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    6 cho
    >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    4 biết cột hoặc chỉ mục nào, còn được gọi là cột chính hoặc chỉ mục chính, bạn muốn tham gia vào. Đây là tùy chọn. Nếu nó không được chỉ định và
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    8 và
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    9 (được đề cập bên dưới) là
    >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    0, thì các cột từ hai Khung dữ liệu có chung tên sẽ được sử dụng làm khóa nối. Nếu bạn sử dụng
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    6, thì cột hoặc chỉ mục mà bạn chỉ định phải có trong cả hai đối tượng

  • >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    2 và
    >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    3 chỉ định một cột hoặc chỉ mục chỉ có trong đối tượng
    >>> precip_one_station = climate_precip.query("STATION == 'GHCND:USC00045721'")
    >>> precip_one_station.head()
                    STATION  .. DLY-SNOW-PCTALL-GE050TI
    1460  GHCND:USC00045721  ..                   -9999
    1461  GHCND:USC00045721  ..                   -9999
    1462  GHCND:USC00045721  ..                   -9999
    1463  GHCND:USC00045721  ..                   -9999
    1464  GHCND:USC00045721  ..                   -9999
    
    9 hoặc
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    0 mà bạn đang hợp nhất. Cả hai đều mặc định là
    >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    6

  • >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    8 và
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    9 đều mặc định là
    >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    0, nhưng nếu bạn muốn sử dụng chỉ mục của đối tượng bên trái hoặc bên phải để hợp nhất, thì bạn có thể đặt đối số liên quan thành
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    0

  • >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    1 là một bộ chuỗi để nối vào các tên cột giống hệt nhau không phải là khóa hợp nhất. Điều này cho phép bạn theo dõi nguồn gốc của các cột có cùng tên

Đây là một số tham số quan trọng nhất cần chuyển đến

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4. Để biết danh sách đầy đủ, hãy xem

Ghi chú. Trong hướng dẫn này, bạn sẽ thấy rằng các ví dụ luôn sử dụng

>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)
6 để chỉ định (các) cột nào sẽ nối vào. Đây là cách an toàn nhất để hợp nhất dữ liệu của bạn vì bạn và bất kỳ ai đọc mã của bạn sẽ biết chính xác điều gì sẽ xảy ra khi gọi điện cho
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4. Nếu bạn không chỉ định (các) cột hợp nhất với
>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)
6, thì gấu trúc sẽ sử dụng bất kỳ cột nào có cùng tên với các khóa hợp nhất

Loại bỏ các quảng cáo

Cách sử dụng >>> climate_temp.shape (127020, 21) >>> climate_precip.shape (151110, 29) 4

Trước khi tìm hiểu chi tiết về cách sử dụng

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4, trước tiên bạn nên hiểu các dạng liên kết khác nhau

  • >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    8
  • >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    9
  • >>> precip_one_station = climate_precip.query("STATION == 'GHCND:USC00045721'")
    >>> precip_one_station.head()
                    STATION  .. DLY-SNOW-PCTALL-GE050TI
    1460  GHCND:USC00045721  ..                   -9999
    1461  GHCND:USC00045721  ..                   -9999
    1462  GHCND:USC00045721  ..                   -9999
    1463  GHCND:USC00045721  ..                   -9999
    1464  GHCND:USC00045721  ..                   -9999
    
    9
  • >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    0

Ghi chú. Mặc dù bạn đang tìm hiểu về việc hợp nhất, nhưng bạn sẽ thấy

>>> outer_merged = pd.merge(
..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
.. )
>>> outer_merged.shape
(127020, 48)
8,
>>> outer_merged = pd.merge(
..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
.. )
>>> outer_merged.shape
(127020, 48)
9,
>>> precip_one_station = climate_precip.query("STATION == 'GHCND:USC00045721'")
>>> precip_one_station.head()
                STATION  .. DLY-SNOW-PCTALL-GE050TI
1460  GHCND:USC00045721  ..                   -9999
1461  GHCND:USC00045721  ..                   -9999
1462  GHCND:USC00045721  ..                   -9999
1463  GHCND:USC00045721  ..                   -9999
1464  GHCND:USC00045721  ..                   -9999
9 và
>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)
0 cũng được gọi là hoạt động nối. Đối với hướng dẫn này, bạn có thể xem xét các điều khoản hợp nhất và tham gia tương đương

Bạn sẽ tìm hiểu chi tiết về các phép nối khác nhau này bên dưới, nhưng trước tiên hãy xem biểu diễn trực quan về chúng

Làm cách nào để nối hai bảng trong Python?
Đại diện trực quan của các loại tham gia

Trong hình ảnh này, hai vòng tròn là hai tập dữ liệu của bạn và các nhãn trỏ đến phần hoặc các phần của tập dữ liệu mà bạn có thể muốn xem. Mặc dù sơ đồ này không bao gồm tất cả các sắc thái, nhưng nó có thể là một hướng dẫn hữu ích cho những người học trực quan

Nếu bạn có kiến ​​thức cơ bản về SQL, thì bạn có thể nhận ra các tên thao tác hợp nhất từ ​​cú pháp

>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
6. Ngoại trừ
>>> outer_merged = pd.merge(
..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
.. )
>>> outer_merged.shape
(127020, 48)
8, tất cả các kỹ thuật này đều là các loại liên kết ngoài. Với các phép nối ngoài, bạn sẽ hợp nhất dữ liệu của mình dựa trên tất cả các khóa trong đối tượng bên trái, đối tượng bên phải hoặc cả hai. Đối với các khóa chỉ tồn tại trong một đối tượng, các cột chưa khớp trong đối tượng khác sẽ được điền bằng
>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
8, viết tắt của Not a Number

Bạn cũng có thể xem giải thích trực quan về các phép nối khác nhau trong ngữ cảnh SQL trên Coding Horror. Bây giờ hãy xem các phép nối khác nhau đang hoạt động

ví dụ

Nhiều hướng dẫn về gấu trúc cung cấp DataFrames rất đơn giản để minh họa các khái niệm mà chúng đang cố gắng giải thích. Cách tiếp cận này có thể gây nhầm lẫn vì bạn không thể liên kết dữ liệu với bất kỳ thứ gì cụ thể. Vì vậy, đối với hướng dẫn này, bạn sẽ sử dụng hai bộ dữ liệu trong thế giới thực làm DataFrames để hợp nhất

  1. Chuẩn khí hậu cho California (nhiệt độ)
  2. Chuẩn khí hậu cho California (lượng mưa)

Bạn có thể khám phá các bộ dữ liệu này và làm theo các ví dụ bên dưới bằng cách sử dụng Sổ tay Jupyter tương tác và CSV dữ liệu khí hậu

Tải xuống sổ ghi chép và tập dữ liệu. Nhấp vào đây để lấy bộ dữ liệu Jupyter Notebook và CSV mà bạn sẽ sử dụng để tìm hiểu về Pandas merge(),. tham gia () và concat () trong hướng dẫn này

Nếu bạn muốn tìm hiểu cách sử dụng Jupyter Notebooks, hãy xem Jupyter Notebook. Một lời giới thiệu

Hai bộ dữ liệu này là của Cơ quan Quản lý Khí quyển và Đại dương Quốc gia (NOAA) và được lấy từ kho lưu trữ dữ liệu công cộng của NOAA. Đầu tiên, tải các bộ dữ liệu vào DataFrames riêng biệt

>>>

>>> import pandas as pd
>>> climate_temp = pd.read_csv("climate_temp.csv")
>>> climate_precip = pd.read_csv("climate_precip.csv")

Trong đoạn mã trên, bạn đã sử dụng pandas'

>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
9 để tải các tệp CSV nguồn của bạn vào các đối tượng
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
3 một cách thuận tiện. Sau đó, bạn có thể xem các tiêu đề và một số hàng đầu tiên của DataFrames đã tải với ____62_______1

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0

Ở đây, bạn đã sử dụng

>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
1 để lấy năm hàng đầu tiên của mỗi DataFrame. Đảm bảo tự mình thử điều này, với Máy tính xách tay Jupyter tương tác hoặc trong bảng điều khiển của bạn, để bạn có thể khám phá dữ liệu sâu hơn

Tiếp theo, hãy xem nhanh kích thước của hai DataFrames

>>>

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)

Lưu ý rằng

>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
3 là thuộc tính của đối tượng
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
3 cho bạn biết kích thước của Khung dữ liệu. Đối với
>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
5, đầu ra của
>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
3 cho biết DataFrame có 127.020 hàng và 21 cột

tham gia bên trong

Trong ví dụ này, bạn sẽ sử dụng

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 với các đối số mặc định của nó, điều này sẽ dẫn đến một phép nối bên trong. Hãy nhớ rằng khi tham gia bên trong, bạn sẽ mất các hàng không khớp trong cột khóa của Khung dữ liệu khác

Với hai tập dữ liệu được tải vào các đối tượng

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
3, bạn sẽ chọn một phần nhỏ của tập dữ liệu lượng mưa và sau đó sử dụng lệnh gọi
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 đơn giản để thực hiện liên kết bên trong. Điều này sẽ dẫn đến một tập dữ liệu nhỏ hơn, tập trung hơn

>>>

>>> precip_one_station = climate_precip.query("STATION == 'GHCND:USC00045721'")
>>> precip_one_station.head()
                STATION  .. DLY-SNOW-PCTALL-GE050TI
1460  GHCND:USC00045721  ..                   -9999
1461  GHCND:USC00045721  ..                   -9999
1462  GHCND:USC00045721  ..                   -9999
1463  GHCND:USC00045721  ..                   -9999
1464  GHCND:USC00045721  ..                   -9999

Tại đây, bạn đã tạo một Khung dữ liệu mới có tên là

>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
0 từ Khung dữ liệu
>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
1, chỉ chọn các hàng trong đó trường
>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
2 là
>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
3

Nếu bạn kiểm tra thuộc tính

>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
4, thì bạn sẽ thấy thuộc tính này có 365 hàng. Khi bạn hợp nhất, bạn nghĩ bạn sẽ nhận được bao nhiêu hàng trong DataFrame đã hợp nhất?

>>>

>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)

Nếu bạn đoán đúng 365 hàng thì bạn đã đúng. Điều này là do

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 mặc định là nối bên trong và nối bên trong sẽ chỉ loại bỏ những hàng không khớp. Bởi vì tất cả các hàng của bạn đều trùng khớp, không có hàng nào bị mất. Bạn cũng nên chú ý rằng hiện có nhiều cột hơn. chính xác là 47

Với

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4, bạn cũng có quyền kiểm soát (những) cột nào sẽ tham gia. Giả sử bạn muốn hợp nhất cả hai tập dữ liệu, nhưng chỉ trên
>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
7 và
>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
8 vì sự kết hợp của cả hai sẽ mang lại một giá trị duy nhất cho mỗi hàng. Để làm như vậy, bạn có thể sử dụng tham số
>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)
6

>>>

>>> inner_merged_total = pd.merge(
..     climate_temp, climate_precip, on=["STATION", "DATE"]
.. )
>>> inner_merged_total.shape
(123005, 48)

Bạn có thể chỉ định một cột khóa với một chuỗi hoặc nhiều cột khóa với một danh sách. Điều này dẫn đến một DataFrame với 123.005 hàng và 48 cột

Tại sao 48 cột thay vì 47? . Điều này có thể dẫn đến tên cột "trùng lặp", có thể có hoặc không có giá trị khác nhau

"Trùng lặp" nằm trong dấu ngoặc kép vì tên cột sẽ không khớp chính xác. Theo mặc định, chúng được thêm vào với

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
00 và
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
01. Bạn cũng có thể sử dụng tham số
>>> outer_merged = pd.merge(
..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
.. )
>>> outer_merged.shape
(127020, 48)
1 để kiểm soát nội dung được thêm vào tên cột

Để tránh bất ngờ, tất cả các ví dụ sau sẽ sử dụng tham số

>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)
6 để chỉ định cột hoặc nhiều cột để nối

tham gia bên ngoài

Tại đây, bạn sẽ chỉ định một phép nối ngoài với tham số

>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)
1. Hãy nhớ từ các sơ đồ ở trên rằng trong một phép nối ngoài—còn được gọi là phép nối ngoài đầy đủ—tất cả các hàng từ cả hai Khung dữ liệu sẽ có mặt trong Khung dữ liệu mới

Nếu một hàng không khớp trong DataFrame khác dựa trên (các) cột chính, thì bạn sẽ không bị mất hàng giống như khi thực hiện nối bên trong. Thay vào đó, hàng sẽ nằm trong DataFrame được hợp nhất, với các giá trị

>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
8 được điền vào khi thích hợp

Điều này được minh họa tốt nhất trong một ví dụ

>>>

>>> outer_merged = pd.merge(
..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
.. )
>>> outer_merged.shape
(127020, 48)

Nếu bạn nhớ từ khi bạn kiểm tra thuộc tính

>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
3 của
>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
5, thì bạn sẽ thấy rằng số lượng hàng trong
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
08 là như nhau. Với phép nối ngoài, bạn có thể mong đợi có cùng số lượng hàng với DataFrame lớn hơn. Đó là bởi vì không có hàng nào bị mất trong một phép nối ngoài, ngay cả khi chúng không khớp trong DataFrame khác

Chỗ nối bên trái

Trong ví dụ này, bạn sẽ chỉ định một phép nối bên trái—còn được gọi là phép nối ngoài bên trái—với tham số

>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)
1. Sử dụng phép nối ngoài bên trái sẽ để lại Khung dữ liệu được hợp nhất mới của bạn với tất cả các hàng từ Khung dữ liệu bên trái, trong khi loại bỏ các hàng từ Khung dữ liệu bên phải không khớp trong cột chính của Khung dữ liệu bên trái

Bạn có thể coi đây là sự hợp nhất nửa bên ngoài, nửa bên trong. Ví dụ dưới đây cho bạn thấy điều này trong thực tế

>>>

>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
10 có 127.020 hàng, khớp với số hàng trong DataFrame bên trái,
>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
5. Để chứng minh rằng điều này chỉ đúng với DataFrame bên trái, hãy chạy cùng một đoạn mã, nhưng thay đổi vị trí của
>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
0 và
>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
5

>>>

>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)

Điều này dẫn đến một DataFrame có 365 hàng, khớp với số hàng trong

>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
0

Quyền tham gia

Phép nối bên phải, hoặc phép nối ngoài bên phải, là phiên bản hình ảnh phản chiếu của phép nối bên trái. Với phép nối này, tất cả các hàng từ DataFrame bên phải sẽ được giữ lại, trong khi các hàng trong DataFrame bên trái không khớp trong cột chính của DataFrame bên phải sẽ bị loại bỏ

Để chứng minh cách nối phải và trái là hình ảnh phản chiếu của nhau, trong ví dụ bên dưới, bạn sẽ tạo lại Khung dữ liệu

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
10 từ phía trên, chỉ lần này sử dụng phép nối phải

>>>

>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)

Tại đây, bạn chỉ cần lật vị trí của các Khung dữ liệu đầu vào và chỉ định một phép nối phù hợp. Khi bạn kiểm tra

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
16, bạn có thể nhận thấy rằng nó không hoàn toàn giống với
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
10. Sự khác biệt duy nhất giữa hai là thứ tự của các cột. các cột của đầu vào đầu tiên sẽ luôn là cột đầu tiên trong DataFrame mới được tạo

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 là công cụ kết hợp dữ liệu phức tạp nhất của gấu trúc. Nó cũng là nền tảng để xây dựng các công cụ khác. Độ phức tạp của nó là sức mạnh lớn nhất của nó, cho phép bạn kết hợp các bộ dữ liệu theo mọi cách và tạo ra những hiểu biết mới về dữ liệu của bạn

Mặt khác, sự phức tạp này làm cho

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 khó sử dụng nếu không có sự hiểu biết trực quan về lý thuyết tập hợp và các phép toán cơ sở dữ liệu. Trong phần này, bạn đã học về các kỹ thuật hợp nhất dữ liệu khác nhau, cũng như hợp nhất nhiều-một và nhiều-nhiều, cuối cùng xuất phát từ lý thuyết tập hợp. Để biết thêm thông tin về lý thuyết tập hợp, hãy xem Sets in Python

Bây giờ, bạn sẽ xem

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5, phiên bản đơn giản hóa của
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4

Loại bỏ các quảng cáo

gấu trúc >>> climate_temp.shape (127020, 21) >>> climate_precip.shape (151110, 29) 5. Kết hợp dữ liệu trên một cột hoặc chỉ mục

Trong khi

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 là một chức năng mô-đun, thì
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 là một phương thức thể hiện tồn tại trên DataFrame của bạn. Điều này cho phép bạn chỉ định một DataFrame, sẽ tham gia DataFrame mà bạn gọi là
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 trên

Về cơ bản,

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 sử dụng
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4, nhưng nó cung cấp một cách hiệu quả hơn để tham gia DataFrames so với lệnh gọi ____2_______4 được chỉ định đầy đủ. Trước khi đi sâu vào các tùy chọn có sẵn cho bạn, hãy xem ví dụ ngắn này

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
0

Với các chỉ số có thể nhìn thấy, bạn có thể thấy một liên kết bên trái xảy ra ở đây, với

>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
0 là Khung dữ liệu bên trái. Bạn có thể nhận thấy rằng ví dụ này cung cấp các tham số
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
30 và
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
31. Bởi vì
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 tham gia vào các chỉ mục và không trực tiếp hợp nhất các DataFrame, nên tất cả các cột—ngay cả những cột có tên trùng khớp—được giữ lại trong DataFrame kết quả

Bây giờ hãy lật lại ví dụ trước và thay vào đó hãy gọi

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 trên DataFrame lớn hơn

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
1

Lưu ý rằng Khung dữ liệu lớn hơn, nhưng dữ liệu không tồn tại trong Khung dữ liệu nhỏ hơn,

>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
0, được điền bằng các giá trị
>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
8

Cách sử dụng >>> climate_temp.shape (127020, 21) >>> climate_precip.shape (151110, 29) 5

Theo mặc định,

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 sẽ cố gắng nối trái trên các chỉ số. Nếu bạn muốn tham gia vào các cột giống như bạn làm với
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4, thì bạn sẽ cần đặt các cột dưới dạng chỉ số

Giống như

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4,
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 có một số tham số giúp bạn linh hoạt hơn khi tham gia. Tuy nhiên, với
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5, danh sách các tham số tương đối ngắn

  • >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    42 là tham số bắt buộc duy nhất. Nó xác định DataFrame khác để tham gia. Bạn cũng có thể chỉ định danh sách DataFrames tại đây, cho phép bạn kết hợp một số bộ dữ liệu trong một cuộc gọi
    >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    5

  • >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    6 chỉ định tên cột hoặc chỉ mục tùy chọn cho Khung dữ liệu bên trái (
    >>> left_merged_reversed = pd.merge(
    ..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
    .. )
    >>> left_merged_reversed.shape
    (365, 48)
    
    5 trong ví dụ trước) để tham gia chỉ mục của Khung dữ liệu
    >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    42. Nếu nó được đặt thành
    >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    6, đây là giá trị mặc định, thì bạn sẽ nhận được liên kết chỉ mục trên chỉ mục

  • >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    1 có các tùy chọn giống như
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    1 từ
    >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    4. Sự khác biệt là nó dựa trên chỉ mục trừ khi bạn cũng chỉ định các cột có
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    6

  • >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    30 và
    >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    31 tương tự như
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    1 trong
    >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    4. Chúng chỉ định một hậu tố để thêm vào bất kỳ cột chồng lấp nào nhưng không có tác dụng khi chuyển danh sách
    >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    42 Khung dữ liệu

  • Có thể bật

    >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    57 để sắp xếp DataFrame kết quả theo khóa tham gia

ví dụ

Trong phần này, bạn sẽ thấy các ví dụ hiển thị một vài trường hợp sử dụng khác nhau cho

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5. Một số sẽ đơn giản hóa các cuộc gọi
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4. Những tính năng khác sẽ là các tính năng đặt
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 ngoài các lệnh gọi
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 dài dòng hơn

Vì bạn đã thấy một cuộc gọi ngắn

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5, nên trong ví dụ đầu tiên này, bạn sẽ cố gắng tạo lại một cuộc gọi
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 với
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5. Điều này sẽ yêu cầu những gì?

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
2

Bởi vì

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 hoạt động trên các chỉ mục, nếu bạn muốn tạo lại
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 từ trước đó, thì bạn phải đặt các chỉ mục trên các cột nối mà bạn chỉ định. Trong ví dụ này, bạn đã sử dụng
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
67 để đặt các chỉ số của mình thành các cột chính trong liên kết. Lưu ý rằng
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 thực hiện nối trái theo mặc định, vì vậy bạn cần sử dụng rõ ràng
>>> inner_merged = pd.merge(precip_one_station, climate_temp)
>>> inner_merged.head()
             STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19

>>> inner_merged.shape
(365, 47)
1 để thực hiện nối bên trong

Với điều này, mối liên hệ giữa

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 và
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 sẽ rõ ràng hơn

Bên dưới, bạn sẽ thấy một cuộc gọi

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 gần như trống rỗng. Do có các cột chồng chéo nên bạn cần chỉ định một hậu tố có
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
30,
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
31 hoặc cả hai, nhưng ví dụ này sẽ minh họa hành vi điển hình hơn của
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
3

Ví dụ này sẽ gợi nhớ đến những gì bạn đã thấy trong phần giới thiệu về

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 trước đó. Cuộc gọi giống nhau, dẫn đến một phép nối trái tạo ra một DataFrame có cùng số hàng như
>>> left_merged_reversed = pd.merge(
..     precip_one_station, climate_temp, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged_reversed.shape
(365, 48)
5

Trong phần này, bạn đã học về

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 và các thông số cũng như cách sử dụng của nó. Bạn cũng đã tìm hiểu về cách thức hoạt động bí mật của
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 và bạn đã tạo lại cuộc gọi
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 với
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 để hiểu rõ hơn về mối liên hệ giữa hai kỹ thuật

Loại bỏ các quảng cáo

gấu trúc >>> climate_temp.shape (127020, 21) >>> climate_precip.shape (151110, 29) 6. Kết hợp dữ liệu trên các hàng hoặc cột

Ghép nối hơi khác so với các kỹ thuật hợp nhất mà bạn đã thấy ở trên. Với việc hợp nhất, bạn có thể mong đợi tập dữ liệu kết quả có các hàng từ tập dữ liệu gốc được trộn lẫn với nhau, thường dựa trên một số điểm chung. Tùy thuộc vào loại hợp nhất, bạn cũng có thể mất các hàng không khớp trong tập dữ liệu khác

Với phép nối, các bộ dữ liệu của bạn chỉ được ghép lại với nhau dọc theo một trục — trục hàng hoặc trục cột. Trực quan, một phép nối không có tham số dọc theo hàng sẽ trông như thế này

Làm cách nào để nối hai bảng trong Python?

Để thực hiện điều này trong mã, bạn sẽ sử dụng

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
6 và chuyển cho nó một danh sách các DataFrame mà bạn muốn nối. Mã cho nhiệm vụ này sẽ trông như thế này

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
4

Ghi chú. Ví dụ này giả định rằng tên cột của bạn giống nhau. Nếu tên cột của bạn khác trong khi nối dọc theo hàng (trục 0), thì theo mặc định, các cột cũng sẽ được thêm vào và các giá trị

>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
8 sẽ được điền vào nếu có

Thay vào đó, nếu bạn muốn thực hiện nối dọc theo các cột thì sao?

Làm cách nào để nối hai bảng trong Python?

Để thực hiện điều này, bạn sẽ sử dụng lệnh gọi

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
6 như bạn đã làm ở trên, nhưng bạn cũng cần chuyển tham số
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
86 với giá trị là
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
87 hoặc
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
88

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
5

Ghi chú. Ví dụ này giả định rằng các chỉ số của bạn giống nhau giữa các bộ dữ liệu. Nếu chúng khác nhau trong khi nối dọc theo các cột (trục 1), thì theo mặc định, các chỉ số (hàng) bổ sung cũng sẽ được thêm vào và các giá trị

>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
8 sẽ được điền vào nếu có

Bạn sẽ tìm hiểu thêm về các tham số cho

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
6 trong phần bên dưới

Cách sử dụng >>> climate_temp.shape (127020, 21) >>> climate_precip.shape (151110, 29) 6

Như bạn có thể thấy, nối là một cách đơn giản hơn để kết hợp các bộ dữ liệu. Nó thường được sử dụng để tạo thành một tập hợp lớn hơn để thực hiện các thao tác bổ sung trên

Ghi chú. Khi bạn gọi

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
6, một bản sao của tất cả dữ liệu mà bạn đang ghép nối sẽ được tạo. Bạn nên cẩn thận với nhiều cuộc gọi
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
6, vì nhiều bản sao được thực hiện có thể ảnh hưởng tiêu cực đến hiệu suất. Ngoài ra, bạn có thể đặt tham số
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
94 tùy chọn thành
>>> inner_merged_total = pd.merge(
..     climate_temp, climate_precip, on=["STATION", "DATE"]
.. )
>>> inner_merged_total.shape
(123005, 48)
0

Khi nối các bộ dữ liệu, bạn có thể chỉ định trục mà bạn sẽ nối. Nhưng điều gì xảy ra với trục kia?

Không. Theo mặc định, phép nối dẫn đến một tập hợp, trong đó tất cả dữ liệu được giữ nguyên. Bạn đã thấy điều này với

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
4 và
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
5 như một phép nối ngoài và bạn có thể chỉ định điều này với tham số
>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
98

Nếu bạn sử dụng tham số này, thì giá trị mặc định là

>>> outer_merged = pd.merge(
..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
.. )
>>> outer_merged.shape
(127020, 48)
9, nhưng bạn cũng có tùy chọn
>>> outer_merged = pd.merge(
..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
.. )
>>> outer_merged.shape
(127020, 48)
8, tùy chọn này sẽ thực hiện phép nối bên trong hoặc đặt giao điểm

Như với các phép nối bên trong khác mà bạn đã thấy trước đó, một số mất dữ liệu có thể xảy ra khi bạn thực hiện phép nối bên trong với

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
6. Chỉ khi các nhãn trục khớp với nhau thì bạn mới giữ lại các hàng hoặc cột

Ghi chú. Hãy nhớ rằng, tham số

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
98 chỉ xác định cách xử lý các trục mà bạn không nối dọc

Vì bạn đã biết về tham số

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
98, đây là một số tham số khác mà
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
6 sử dụng

  • >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    05 lấy bất kỳ trình tự nào—thường là một danh sách—của các đối tượng
    >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    2 hoặc
    >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    3 để được nối. Bạn cũng có thể cung cấp một từ điển. Trong trường hợp này, các khóa sẽ được sử dụng để xây dựng chỉ mục phân cấp

  • >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    86 đại diện cho trục mà bạn sẽ nối dọc theo. Giá trị mặc định là
    >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    09, nối dọc theo chỉ mục hoặc trục hàng. Ngoài ra, một giá trị của
    >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    87 sẽ nối theo chiều dọc, dọc theo các cột. Bạn cũng có thể sử dụng các giá trị chuỗi
    >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    11 hoặc
    >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    88

  • >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    98 tương tự như tham số
    >>> inner_merged = pd.merge(precip_one_station, climate_temp)
    >>> inner_merged.head()
                 STATION            STATION_NAME  ..  DLY-HTDD-BASE60  DLY-HTDD-NORMAL
    0  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    1  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    2  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    3  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    4  GHCND:USC00045721  MITCHELL CAVERNS CA US  ..               14               19
    
    >>> inner_merged.shape
    (365, 47)
    
    1 trong các kỹ thuật khác, nhưng nó chỉ chấp nhận các giá trị
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    8 hoặc
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    9. Giá trị mặc định là
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    9, giữ nguyên dữ liệu, trong khi
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    8 sẽ loại bỏ dữ liệu không khớp trong tập dữ liệu khác

  • >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    19 nhận giá trị Boolean
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    0 hoặc
    >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    0. Nó mặc định là
    >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    0. Nếu
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    0, thì tập dữ liệu kết hợp mới sẽ không bảo toàn các giá trị chỉ mục ban đầu trong trục được chỉ định trong tham số
    >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    86. Điều này cho phép bạn có các giá trị chỉ mục hoàn toàn mới

  • >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    25 cho phép bạn tạo chỉ mục phân cấp. Một trường hợp sử dụng phổ biến là có một chỉ mục mới trong khi vẫn giữ nguyên các chỉ mục ban đầu để bạn có thể biết hàng nào, ví dụ, đến từ tập dữ liệu gốc nào

  • >>> climate_temp.head()
                 STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
    0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
    
    >>> climate_precip.head()
                 STATION  .. DLY-SNOW-PCTALL-GE050TI
    0  GHCND:USC00049099  ..                   -9999
    1  GHCND:USC00049099  ..                   -9999
    2  GHCND:USC00049099  ..                   -9999
    3  GHCND:USC00049099  ..                       0
    4  GHCND:USC00049099  ..                       0
    
    94 chỉ định xem bạn có muốn sao chép dữ liệu nguồn hay không. Giá trị mặc định là
    >>> outer_merged = pd.merge(
    ..     precip_one_station, climate_temp, how="outer", on=["STATION", "DATE"]
    .. )
    >>> outer_merged.shape
    (127020, 48)
    
    0. Nếu giá trị được đặt thành
    >>> inner_merged_total = pd.merge(
    ..     climate_temp, climate_precip, on=["STATION", "DATE"]
    .. )
    >>> inner_merged_total.shape
    (123005, 48)
    
    0, thì gấu trúc sẽ không tạo bản sao của dữ liệu nguồn

Danh sách này không đầy đủ. Bạn có thể tìm thấy danh sách đầy đủ, cập nhật các thông số trong

Loại bỏ các quảng cáo

ví dụ

Đầu tiên, bạn sẽ thực hiện nối cơ bản dọc theo trục mặc định bằng cách sử dụng DataFrames mà bạn đã sử dụng trong suốt hướng dẫn này

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
6

Cái này thiết kế rất đơn giản. Tại đây, bạn đã tạo một DataFrame gấp đôi một DataFrame nhỏ đã được tạo trước đó. Một điều cần lưu ý là các chỉ số lặp lại. Nếu bạn muốn có một chỉ mục mới, dựa trên 0, thì bạn có thể sử dụng tham số

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
19

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
7

Như đã lưu ý trước đó, nếu bạn nối dọc theo trục 0 (các hàng) nhưng có nhãn ở trục 1 (cột) không khớp, thì các cột đó sẽ được thêm vào và điền vào các giá trị

>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
8. Điều này dẫn đến một kết nối bên ngoài

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
8

Với hai DataFrames này, do bạn chỉ ghép dọc theo hàng nên rất ít cột trùng tên. Điều đó có nghĩa là bạn sẽ thấy rất nhiều cột có giá trị

>>> left_merged = pd.merge(
..     climate_temp, precip_one_station, how="left", on=["STATION", "DATE"]
.. )
>>> left_merged.shape
(127020, 48)
8

Thay vào đó, để loại bỏ các cột có bất kỳ dữ liệu bị thiếu nào, hãy sử dụng tham số

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
98 với giá trị
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
33 để thực hiện nối bên trong

>>>

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
9

Sử dụng phép nối bên trong, bạn sẽ chỉ còn lại những cột mà DataFrames ban đầu có điểm chung.

>>> right_merged = pd.merge(
..     precip_one_station, climate_temp, how="right", on=["STATION", "DATE"]
.. )
>>> right_merged.shape
(127020, 48)
2,
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
35 và
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
36

Bạn cũng có thể lật cái này bằng cách đặt tham số

>>> climate_temp.head()
             STATION            STATION_NAME  .. DLY-HTDD-BASE60 DLY-HTDD-NORMAL
0  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
1  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
2  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
3  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15
4  GHCND:USC00049099  TWENTYNINE PALMS CA US  ..              10              15

>>> climate_precip.head()
             STATION  .. DLY-SNOW-PCTALL-GE050TI
0  GHCND:USC00049099  ..                   -9999
1  GHCND:USC00049099  ..                   -9999
2  GHCND:USC00049099  ..                   -9999
3  GHCND:USC00049099  ..                       0
4  GHCND:USC00049099  ..                       0
86

>>>

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
0

Bây giờ bạn chỉ có các hàng có dữ liệu cho tất cả các cột trong cả hai Khung dữ liệu. Không phải ngẫu nhiên mà số lượng hàng tương ứng với số lượng của DataFrame nhỏ hơn

Một thủ thuật hữu ích khác để ghép nối là sử dụng tham số

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
25 để tạo nhãn trục phân cấp. Điều này hữu ích nếu bạn muốn giữ lại các chỉ số hoặc tên cột của tập dữ liệu gốc nhưng cũng muốn thêm những cái mới

>>>

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
1

Nếu bạn kiểm tra DataFrames ban đầu, thì bạn có thể xác minh xem các nhãn trục cấp cao hơn

>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
39 và
>>> climate_temp.shape
(127020, 21)
>>> climate_precip.shape
(151110, 29)
40 đã được thêm vào các hàng thích hợp hay chưa

Phần kết luận

Bây giờ bạn đã học được ba kỹ thuật quan trọng nhất để kết hợp dữ liệu trong gấu trúc

  1. >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    4 để kết hợp dữ liệu trên các cột hoặc chỉ mục chung
  2. >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    5 để kết hợp dữ liệu trên một cột chính hoặc một chỉ mục
  3. >>> climate_temp.shape
    (127020, 21)
    >>> climate_precip.shape
    (151110, 29)
    
    6 để kết hợp DataFrames trên các hàng hoặc cột

Ngoài việc học cách sử dụng các kỹ thuật này, bạn cũng đã học về logic tập hợp bằng cách thử nghiệm các cách khác nhau để tham gia tập dữ liệu của mình. Ngoài ra, bạn đã tìm hiểu về các tham số phổ biến nhất cho từng kỹ thuật trên và những đối số nào bạn có thể chuyển để tùy chỉnh đầu ra của chúng

Bạn đã thấy các kỹ thuật này hoạt động trên tập dữ liệu thực thu được từ NOAA, tập dữ liệu này không chỉ cho bạn thấy cách kết hợp dữ liệu của mình mà còn cả lợi ích của việc làm như vậy với các kỹ thuật tích hợp sẵn của gấu trúc. Nếu bạn chưa tải xuống các tệp dự án, bạn có thể lấy chúng tại đây

Tải xuống sổ ghi chép và tập dữ liệu. Nhấp vào đây để lấy bộ dữ liệu Jupyter Notebook và CSV mà bạn sẽ sử dụng để tìm hiểu về Pandas merge(),. tham gia () và concat () trong hướng dẫn này

Bạn đã học được điều gì mới?

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Kết hợp dữ liệu trong pandas Với concat() và merge()

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Làm cách nào để nối hai bảng trong Python?

Gửi cho tôi thủ thuật Python »

Giới thiệu về Kyle Stratis

Làm cách nào để nối hai bảng trong Python?
Làm cách nào để nối hai bảng trong Python?

Kyle là một nhà phát triển tự học đang làm kỹ sư dữ liệu cấp cao tại Vizit Labs. Trong quá khứ, ông đã thành lập DanqEx (trước đây là Nasdanq. sàn giao dịch chứng khoán meme ban đầu) và Encryptid Gaming

» Thông tin thêm về Kyle


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Làm cách nào để nối hai bảng trong Python?

Aldren

Làm cách nào để nối hai bảng trong Python?

Bryan

Làm cách nào để nối hai bảng trong Python?

Geir Arne

Làm cách nào để nối hai bảng trong Python?

Joanna

Làm cách nào để nối hai bảng trong Python?

Gia-cốp

Làm cách nào để nối hai bảng trong Python?

kate

Làm cách nào để nối hai bảng trong Python?

Martin

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi