# Hoe DataFrames samenvoegen met pandas merge()

Met de pandas-functie `DataFrame.merge()` kunt u DataFrames combineren met behulp van sleutels. Hierdoor kunt u gegevens uit verschillende bronnen efficiënt combineren, waardoor u uitgebreidere analyses kunt uitvoeren.

## Wat is de syntaxis voor pandas `merge()`?

De Python pandas DataFrame `merge()` kan een reeks verschillende parameters accepteren, waardoor ontwikkelaars kunnen specificeren hoe DataFrames moeten worden gecombineerd. De algemene syntaxis van de `merge()` is als volgt:

```python
DataFrame.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
```

Opmerking De functie pandas `merge()` is vergelijkbaar met de JOIN-bewerking in SQL. Als je ervaring hebt met relationele databases zoals [SQL](https://www.ionos.com/nl-be/digitalguide/server/knowhow/wat-is-sql/), is het wellicht makkelijker om te begrijpen hoe de methode pandas DataFrame `merge()` werkt. Houd er echter rekening mee dat er enkele verschillen zijn. In pandas worden waarden die als *null* worden geëvalueerd, ook samengevoegd als beide sleutelkolommen deze waarden bevatten.

### Welke parameters kunnen worden gebruikt met pandas `merge`?

Met de verschillende parameters die door `merge()` worden geaccepteerd, kunt u niet alleen specificeren welke [pandas DataFrames](https://www.ionos.com/nl-be/digitalguide/websites/webontwikkeling/python-pandas-dataframe/) moeten worden gecombineerd, maar ook welk type join moet worden gebruikt en andere details.

<table>
  <thead>
    <tr>
      <th><strong>Parameter</strong></th>
      <th><strong>Beschrijving</strong></th>
      <th><strong>Standaardwaarde</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>links</td>
      <td>Het eerste DataFrame dat moet worden samengevoegd</td>
      <td></td>
    </tr>
    <tr>
      <td>rechts</td>
      <td>Het tweede DataFrame dat moet worden samengevoegd</td>
      <td></td>
    </tr>
    <tr>
      <td>hoe</td>
      <td>Het type join-bewerking dat moet worden uitgevoerd (`inner`, `outer`, `left`, `right`)</td>
      <td>`inner`</td>
    </tr>
    <tr>
      <td>op</td>
      <td>De kolom(men) of indexniveau(s) die als sleutels moeten worden gebruikt; moeten in beide DataFrames aanwezig zijn</td>
      <td></td>
    </tr>
    <tr>
      <td>left\_on</td>
      <td>De kolom(men) of indexniveau(s) van het linker DataFrame die als sleutel(s) moeten worden gebruikt</td>
      <td></td>
    </tr>
    <tr>
      <td>right\_on</td>
      <td>De kolom(men) of indexniveau(s) van de rechter DataFrame die als sleutel(s) moeten worden gebruikt</td>
      <td></td>
    </tr>
    <tr>
      <td>left\_index</td>
      <td>Als `True`, wordt de index van het linker DataFrame gebruikt als sleutel</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>right\_index</td>
      <td>Als `True`, wordt de index van het rechter DataFrame gebruikt als sleutel.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>sorteren</td>
      <td>Als `True`, worden de sleutels van het resulterende DataFrame lexicografisch gesorteerd.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>achtervoegsels</td>
      <td>Achtervoegsels die worden gebruikt om kolommen met dezelfde naam te onderscheiden</td>
      <td>`("_x", "_y")`</td>
    </tr>
    <tr>
      <td>kopiëren</td>
      <td>Als `False`, wordt kopiëren vermeden</td>
      <td>`True`</td>
    </tr>
  </tbody>
</table>

## Hoe pandas `merge()` te gebruiken

Hieronder volgen enkele voorbeelden om te illustreren hoe pandas `merge()` effectief kan worden gebruikt.

### `INNER JOIN`

Een INNER JOIN combineert twee pandas DataFrames en **retourneert alleen de rijen waarvan de sleutels in beide DataFrames overeenkomen**. Om een beter beeld te krijgen van hoe dit werkt, maken we twee DataFrames:

```python
import pandas as pd
# Sample DataFrames
df1 = pd.DataFrame({
    'Key': ['A', 'B', 'C'],
    'Value1': [1, 2, 3]
})
df2 = pd.DataFrame({
    'Key': ['B', 'C', 'D'],
    'Value2': [4, 5, 6]
})
print(df1)
print(df2)
```

De twee resulterende DataFrames zien er als volgt uit:

```none
Key    Value1
0     A            1
1     B            2
2     C            3
    Key    Value2
0     B            4
1     C            5
2     D            6
```

Nu kunnen we een `INNER JOIN` uitvoeren met behulp van de `merge()` -functie:

```python
# INNER JOIN
result = pd.merge(df1, df2, how='inner', on='Key')
print(result)
```

De uitvoer laat zien dat alleen de rijen met de sleutels B en C zijn opgenomen in het DataFrame. Dit komt omdat deze twee sleutels in **beide oorspronkelijke DataFrames** voorkomen.

```none
Key    Value1    Value2
0     B            2            4
1     C            3            5
```

### `OUTER JOIN`

Een `OUTER JOIN` voegt ook twee DataFrames samen, maar in tegenstelling tot `INNER JOIN` retourneert het **alle rijen** en vult het **ontbrekende waarden** in **met `NaN`**.

```python
# OUTER JOIN
result = pd.merge(df1, df2, how='outer', on='Key')
print(result)
```

Het onderstaande DataFrame bevat **alle rijen uit beide DataFrames**. `NaN` wordt gebruikt voor de ontbrekende waarden in sleutel A, die alleen in `df1` voorkomt, en sleutel D, die alleen in `df2` voorkomt.

```none
Key    Value1    Value2
0     A        1.0        NaN
1     B        2.0        4.0
2     C        3.0        5.0
3     D        NaN        6.0
```

Opmerking De andere standaardvarianten van `JOIN` werken op een vergelijkbare manier.

### Met behulp van `left_on` en `right_on`

Soms hebben twee DataFrames verschillende kolomnamen voor hun sleutels. In dat geval kunt u de parameters `left_on` en `right_on` gebruiken om aan te geven welke kolommen u wilt gebruiken. Laten we eerst twee nieuwe DataFrames maken:

```python
df3 = pd.DataFrame({
    'Key': ['A', 'B', 'C'],
    'Value1': [1, 2, 3]
})
df4 = pd.DataFrame({
    'Key2': ['B', 'C', 'D'],
    'Value2': [4, 5, 6]
})
print(df3)
print(df4)
```

De twee DataFrames zien er als volgt uit:

```none
Key    Value1
0     A            1
1     B            2
2     C            3
    Key2    Value2
0        B            4
1        C            5
2        D            6
```

We kunnen de parameters `left_on` en `right_on` gebruiken om de bewerking `JOIN` uit te voeren met verschillende toetsen:

```python
# Join with different key column names
result = pd.merge(df3, df4, how='inner', left_on='Key', right_on='Key2')
print(result)
```

Door expliciet gebruik te maken van `left_on='Key'` en `right_on='Key2'` worden de bijbehorende sleutelkolommen gebruikt voor het samenvoegen.

```none
Key    Value1 Key2    Value2
0     B            2        B            4
1     C            3        C            5
```

### Indexen als sleutels gebruiken

Je kunt ook de **indexen van DataFrames als sleutels** gebruiken door de parameters `left_index` en `right_index` in te stellen op `True`. Laten we eerst twee nieuwe DataFrames met indexen maken:

```python
df5 = pd.DataFrame({
    'Value1': [1, 2, 3]
}, index=['A', 'B', 'C'])
df6 = pd.DataFrame({
    'Value2': [4, 5, 6]
}, index=['B', 'C', 'D'])
print(df5)
print(df6)
```

Hier zijn de DataFrames:

```none
Value1
A        1
B        2
C        3
    Value2
B        4
C        5
D        6
```

Nu kunnen we een `JOIN` -bewerking uitvoeren met behulp van de indices:

```python
# JOIN with indices
result = pd.merge(df5, df6, how='inner', left_index=True, right_index=True)
print(result)
```

Het resultaat is een `JOIN` die gebruikmaakt van de indexen uit de DataFrames:

```none
Value1  Value2
B        2        4
C        3        5
```


This is a markdown version of: [https://www.ionos.com/nl-be/digitalguide/websites/webontwikkeling/python-pandas-dataframe-samenvoegen/](https://www.ionos.com/nl-be/digitalguide/websites/webontwikkeling/python-pandas-dataframe-samenvoegen/) for AI/LLM consumption.