# Kako združiti DataFrames s pandas merge()

S funkcijo pandas `DataFrame.merge()` lahko združujete DataFrames z uporabo ključev. To vam omogoča učinkovito združevanje podatkov iz različnih virov, kar vam omogoča izvajanje bolj celovitih analiz.

## Kakšna je sintaksa za pandas `merge()`?

Metoda Python pandas DataFrame `merge()` sprejema različne parametre, kar razvijalcem omogoča, da določijo, kako naj se DataFrames združijo. Splošna sintaksa funkcije `merge()` je naslednja:

```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)
```

Note Funkcija pandas `merge()` je podobna operaciji JOIN v SQL. Izkušnje z relacijskimi bazami podatkov, kot [je SQL](https://www.ionos.com/sl-si/digitalguide/streznik/znanje/kaj-je-sql/), lahko olajšajo razumevanje delovanja metode pandas DataFrame `merge()`. Upoštevajte pa, da obstajajo nekatere razlike. V pandas, če imata obe ključni stolpci vrednosti, ki se izračunajo kot *ničelne*, se te vrednosti prav tako združijo.

### Kateri parametri se lahko uporabljajo s pandas `merge`?

Različni parametri, ki jih sprejema `merge()`, vam omogočajo, da določite ne le, katere [pandas DataFrames](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/python-pandas-dataframe/) želite združiti, ampak tudi, kateri tip združitve želite uporabiti, ter druge podrobnosti.

<table>
  <thead>
    <tr>
      <th><strong>Parameter</strong></th>
      <th><strong>Opis</strong></th>
      <th><strong>Privzeta vrednost</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>levo</td>
      <td>Prvi DataFrame, ki se združi</td>
      <td></td>
    </tr>
    <tr>
      <td>desno</td>
      <td>Drugi DataFrame, ki ga je treba združiti</td>
      <td></td>
    </tr>
    <tr>
      <td>kako</td>
      <td>Vrsta operacije združevanja, ki jo je treba izvesti (`inner`, `outer`, `left`, `right`)</td>
      <td>`inner`</td>
    </tr>
    <tr>
      <td>na</td>
      <td>Stolpci ali ravni indeksa, ki se uporabijo kot ključi; morajo biti prisotni v obeh DataFrames.</td>
      <td></td>
    </tr>
    <tr>
      <td>left\_on</td>
      <td>Stolpec(-ci) ali indeksna raven(-i) levega DataFrame-a, ki naj se uporabi(-jo) kot ključ(-i)</td>
      <td></td>
    </tr>
    <tr>
      <td>desno\_na</td>
      <td>Stolpec(-i) ali indeksna raven(-e) desnega DataFrame-a, ki naj se uporabi(-jo) kot ključ(-i)</td>
      <td></td>
    </tr>
    <tr>
      <td>left\_index</td>
      <td>Če je `True`, se indeks levega DataFrame uporabi kot ključ</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>desni\_indeks</td>
      <td>Če je `True`, se kot ključ uporabi indeks desnega DataFrame-a.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>sort</td>
      <td>Če je `True`, so ključi končnega DataFrame razvrščeni leksikografsko.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>pona</td>
      <td>Pripone, ki se uporabljajo za razlikovanje stolpcev z enakim imenom.</td>
      <td>`("_x", "_y")`</td>
    </tr>
    <tr>
      <td>kopija</td>
      <td>Če je `False`, se kopiranje izogne.</td>
      <td>`True`</td>
    </tr>
  </tbody>
</table>

## Kako uporabljati pandas `merge()`

Spodaj je nekaj primerov, ki pomagajo ponazoriti, kako učinkovito uporabljati pandas `merge()`.

### `INNER JOIN`

INNER JOIN združi dva pandas DataFrames in **vrne samo vrstice, kjer se ključi ujemajo v obeh DataFrames**. Da bi bolje razumeli, kako to deluje, ustvarimo dva 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)
```

Dva nastala DataFrames sta videti takole:

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

Sedaj lahko izvedemo `INNER JOIN` z uporabo funkcije `merge()`:

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

Izhodni podatki kažejo, da so v DataFrame vključene samo vrstice, ki imajo ključa B in C. To je zato, ker ta dva ključa obstajata v **obeh izvirnih DataFrame**.

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

### `OUTER JOIN`

An `OUTER JOIN` prav tako združi dva DataFrames, vendar za razliko od `INNER JOIN` vrne **vse vrstice** in izpolni **manjkajoče vrednosti s `NaN`**.

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

Spodnji DataFrame vključuje **vse vrstice iz obeh DataFrames**. `NaN` se uporablja za manjkajoče vrednosti v ključu A, ki je samo v `df1`, in ključu D, ki je samo v `df2`.

```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
```

Note Druge standardne različice `JOIN` delujejo na podoben način.

### Uporaba `left_on` in `right_on`

Včasih imata dva DataFrames različna imena stolpcev za svoje ključe. V tem primeru lahko uporabite parametra `left_on` in `right_on`, da določite, katere stolpce želite uporabiti. Najprej ustvarimo dva nova DataFrames:

```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)
```

Oba DataFrames sta videti takole:

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

Parametre `left_on` in `right_on` lahko uporabimo za izvedbo operacije `JOIN` z različnimi tipkami:

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

Z izrecno uporabo `left_on='Key'` in `right_on='Key2'` se za združevanje uporabijo ustrezni ključni stolpci.

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

### Uporaba indeksov kot ključev

**Indekse DataFrames** lahko uporabite tudi **kot ključe**, tako da parametra `left_index` in `right_index` nastavite na `True`. Najprej ustvarimo dva nova DataFrames z indeksi:

```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)
```

Tukaj so podatkovni okviri:

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

Sedaj lahko izvedemo operacijo `JOIN` z uporabo indeksov:

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

Rezultat je `JOIN`, ki uporablja indekse iz DataFrames:

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


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/python-pandas-zdruzevanje-podatkovnih-okvirov/](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/python-pandas-zdruzevanje-podatkovnih-okvirov/) for AI/LLM consumption.