合併 DataFrame

使用 Polars 進行資料轉換

Liam Brannigan

Data Scientist & Polars Contributor

評論資料

shape: (5, 4)
| business         | location    | review | price |
| ---              | ---         | ---    | ---   |
| str              | str         | f64    | i64   |
|------------------|-------------|--------|-------|
| 7burgers         | Wakey Wakey | 4.2    | 15    |
| Bang Bang Burger | Forest Rd.  | 3.8    | 12    |
| Costa Coffee     | City Point  | 4.5    | 8     |
| Costa Coffee     | Waterloo    | 4.1    | 8     |
| The Queens Head  | Denman St.  | 4.7    | 25    |
使用 Polars 進行資料轉換

稽查資料集

inspections = pl.read_csv("restaurant_inspections.csv")
shape: (5, 4)
| business        | location    | type       | hygiene_rating |
| ---             | ---         | ---        | ---            |
| str             | str         | str        | i64            |
|-----------------|-------------|------------|----------------|
| 7burgers        | Wakey Wakey | restaurant | 4              |
| Costa Coffee    | City Point  | café       | 5              |
| Costa Coffee    | Waterloo    | café       | 3              |
| The Queens Head | Denman St.  | bar        | 5              |
| Wagamama        | Soho        | restaurant | 4              |
使用 Polars 進行資料轉換

什麼是 join?

單一 DataFrame 的示意圖。

使用 Polars 進行資料轉換

什麼是 join?

兩個 DataFrame 的示意圖。

使用 Polars 進行資料轉換

什麼是 join?

兩個 DataFrame,以相符的鍵突出顯示。

使用 Polars 進行資料轉換

什麼是 join?

兩個 DataFrame 依共同欄位比對列後合併的示意圖。

使用 Polars 進行資料轉換

什麼是 join?

兩個 DataFrame 依共同欄位比對後合併,並以相符鍵突出顯示的示意圖。

使用 Polars 進行資料轉換

以單一欄位 join

reviews.join(                                       )
使用 Polars 進行資料轉換

以單一欄位 join

reviews.join(inspections,                           )
使用 Polars 進行資料轉換

以單一欄位 join

reviews.join(inspections, on="business"             )
使用 Polars 進行資料轉換

以單一欄位 join

reviews.join(inspections, on="business", how="inner")
shape: (6, 7)
| business      | location    | ... | location_right | hygiene_rating |
| ---           | ---         | ... | ---            | ---            |
| str           | str         | ... | str            | i64            |
|---------------|-------------|-----|----------------|----------------|
| 7burgers      | Wakey Wakey | ... | Wakey Wakey    | 4              |
| Costa Coffee  | City Point  | ... | City Point     | 5              |
| Costa Coffee  | Waterloo    | ... | City Point     | 5              |
| Costa Coffee  | City Point  | ... | Waterloo       | 3              |
| Costa Coffee  | Waterloo    | ... | Waterloo       | 3              |
| The Queens Hd | Denman St.  | ... | Denman St.     | 5              |
使用 Polars 進行資料轉換

以多欄位 join

reviews.join(inspections, on=["business", "location"])
使用 Polars 進行資料轉換

以多欄位 join

reviews.join(inspections, on=["business", "location"])
shape: (4, 6)
| business        | location    | review | price | type       | hygiene_rating |
| ---             | ---         | ---    | ---   | ---        | ---            |
| str             | str         | f64    | i64   | str        | i64            |
|-----------------|-------------|--------|-------|------------|----------------|
| 7burgers        | Wakey Wakey | 4.2    | 15    | restaurant | 4              |
| Costa Coffee    | City Point  | 4.5    | 8     | café       | 5              |
| Costa Coffee    | Waterloo    | 4.1    | 8     | café       | 3              |
| The Queens Head | Denman St.  | 4.7    | 25    | bar        | 5              |
使用 Polars 進行資料轉換

Left join(左連接)

reviews.join(inspections, on=["business", "location"],           )
使用 Polars 進行資料轉換

Left join(左連接)

reviews.join(inspections, on=["business", "location"], how="left")
shape: (5, 6)
| business         | location    | review | price | type       | hygiene_rating |
| ---              | ---         | ---    | ---   | ---        | ---            |
| str              | str         | f64    | i64   | str        | i64            |
|------------------|-------------|--------|-------|------------|----------------|
| 7burgers         | Wakey Wakey | 4.2    | 15    | restaurant | 4              |
| Bang Bang Burger | Forest Rd.  | 3.8    | 12    | null       | null           |
| Costa Coffee     | City Point  | 4.5    | 8     | café       | 5              |
| Costa Coffee     | Waterloo    | 4.1    | 8     | café       | 3              |
| The Queens Head  | Denman St.  | 4.7    | 25    | bar        | 5              |
使用 Polars 進行資料轉換

Full join(全連接)

reviews.join(inspections, on=["business", "location"],                          )
使用 Polars 進行資料轉換

Full join(全連接)

reviews.join(inspections, on=["business", "location"], how="full"               )
使用 Polars 進行資料轉換

Full join(全連接)

reviews.join(inspections, on=["business", "location"], how="full", coalesce=True)
shape: (6, 6)
| business         | location    | review | price | type       | hygiene_rating |
| ---              | ---         | ---    | ---   | ---        | ---            |
| str              | str         | f64    | i64   | str        | i64            |
|------------------|-------------|--------|-------|------------|----------------|
| 7burgers         | Wakey Wakey | 4.2    | 15    | restaurant | 4              |
| Costa Coffee     | City Point  | 4.5    | 8     | café       | 5              |
| Costa Coffee     | Waterloo    | 4.1    | 8     | café       | 3              |
| The Queens Head  | Denman St.  | 4.7    | 25    | bar        | 5              |
| Wagamama         | Soho        | null   | null  | restaurant | 4              |
| Bang Bang Burger | Forest Rd.  | 3.8    | 12    | null       | null           |
使用 Polars 進行資料轉換

選擇 join 策略

2 個資料表

使用 Polars 進行資料轉換

Inner join(內連接)

Inner join 示意

使用 Polars 進行資料轉換

Left join(左連接)

Left join 示意

使用 Polars 進行資料轉換

Full join(全連接)

Full join 示意

使用 Polars 進行資料轉換

一起來練習吧!

使用 Polars 進行資料轉換

Preparing Video For Download...