# Kā apvienot DataFrames ar pandas merge()

Ar pandas funkciju `DataFrame.merge()` varat apvienot DataFrames, izmantojot atslēgas. Tas ļauj efektīvi apvienot datus no dažādiem avotiem, dodot iespēju veikt visaptverošākas analīzes.

## Kāda ir pandas `merge()` sintakse?

Python pandas DataFrame `merge()` metode var pieņemt virkni dažādu parametru, ļaujot izstrādātājiem norādīt, kā DataFrames jākombinē. `merge()` funkcijas vispārīgā sintakse ir šāda:

```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 Pandas `merge()` funkcija ir līdzīga JOIN operācijai SQL. Pieredze ar relatīvajām datu bāzēm, piemēram, [SQL](https://www.ionos.com/lv-lv/digitalguide/serveris/prasmes-un-zinasanas/kas-ir-sql/), var atvieglot pandas DataFrame `merge()` metodes darbības izpratni. Tomēr jāpatur prātā, ka pastāv dažas atšķirības. Pandas, ja abām atslēgas kolonnām ir vērtības, kas novērtētas kā *null*, šīs vērtības arī tiks apvienotas.

### Kādus parametrus var izmantot ar pandas `merge`?

Dažādie parametri, ko pieņem `merge()`, ļauj ne tikai norādīt, kurus [pandas DataFrames](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/python-pandas-dataframe/) apvienot, bet arī, kādu savienojuma veidu izmantot, kā arī citas detaļas.

<table>
  <thead>
    <tr>
      <th><strong>Parametrs</strong></th>
      <th><strong>Apraksts</strong></th>
      <th><strong>Noklusējuma vērtība</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>kreisais</td>
      <td>Pirmais apvienojamais DataFrame</td>
      <td></td>
    </tr>
    <tr>
      <td>labais</td>
      <td>Otrais apvienojamais DataFrame</td>
      <td></td>
    </tr>
    <tr>
      <td>kā</td>
      <td>Veicamā apvienošanas operācijas veids (`inner`, `outer`, `left`, `right`)</td>
      <td>`inner`</td>
    </tr>
    <tr>
      <td>uz</td>
      <td>Kolonna(-as) vai indeksa līmenis(-i), kas jāizmanto kā atslēgas; jābūt abos DataFrame</td>
      <td></td>
    </tr>
    <tr>
      <td>left\_on</td>
      <td>Kolonna(-as) vai indeksa līmenis(-i) kreisajā DataFrame, kas jāizmanto kā atslēga(-as)</td>
      <td></td>
    </tr>
    <tr>
      <td>labais\_uz</td>
      <td>Labās DataFrame kolonna(-as) vai indeksa līmenis(-i), kas jāizmanto kā atslēga(-as)</td>
      <td></td>
    </tr>
    <tr>
      <td>left\_index</td>
      <td>Ja `True`, kā atslēga tiek izmantots kreisā DataFrame indekss</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>labais\_indekss</td>
      <td>Ja `True`, kā atslēga tiek izmantots labās DataFrame indekss.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>sort</td>
      <td>Ja `True`, rezultātā iegūto DataFrame atslēgas tiek šķirotas leksikogrāfiski.</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>suffixes</td>
      <td>Piedēkļi, kas tiek izmantoti, lai atšķirtu kolonnas ar vienādu nosaukumu</td>
      <td>`("_x", "_y")`</td>
    </tr>
    <tr>
      <td>kopija</td>
      <td>Ja `False`, kopēšana netiek veikta</td>
      <td>`True`</td>
    </tr>
  </tbody>
</table>

## Kā lietot pandas `merge()`

Zemāk ir daži piemēri, kas palīdz ilustrēt, kā efektīvi izmantot pandas `merge()`.

### `INNER JOIN`

INNER JOIN apvieno divus pandas DataFrames un **atgriež tikai rindas, kurās atslēgas abos DataFrames saskan**. Lai labāk izprastu, kā tas darbojas, izveidosim divus 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)
```

Abos rezultātā iegūtajos DataFrames izskatās šādi:

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

Tagad mēs varam veikt `INNER JOIN`, izmantojot `merge()` funkciju:

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

Rezultāts parāda, ka DataFrame ir iekļautas tikai rindas, kurām ir atslēgas B un C. Tas ir tāpēc, ka šīs divas atslēgas ir **abās sākotnējās DataFrame**.

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

### `OUTER JOIN`

An `OUTER JOIN` arī apvieno divus DataFrames, bet atšķirībā no `INNER JOIN`, tas atgriež **visas rindas** un aizpilda **trūkstošās vērtības ar `NaN`**.

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

Zemāk redzamajā DataFrame ir iekļautas **visas rindas no abiem DataFrame**. `NaN` tiek izmantots trūkstošajām vērtībām atslēgā A, kas ir tikai `df1`, un atslēgā D, kas ir tikai `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 Pārējie standarta varianti `JOIN` darbojas līdzīgi.

### Izmantojot `left_on` un `right_on`

Dažreiz diviem DataFrames ir atšķirīgi kolonnu nosaukumi to atslēgām. Šādā gadījumā varat izmantot `left_on` un `right_on` parametrus, lai norādītu, kuras kolonnu izmantot. Vispirms izveidosim divus jaunus 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)
```

Abas DataFrames izskatās šādi:

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

Mēs varam izmantot `left_on` un `right_on` parametrus, lai veiktu `JOIN` operāciju, izmantojot dažādas taustiņus:

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

Izmantojot `left_on='Key'` un `right_on='Key2'`, apvienošanai tiek izmantotas atbilstošās atslēgas kolonnas.

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

### Indeksu izmantošana kā atslēgas

Jūs varat arī izmantot **DataFrames indeksus kā atslēgas**, iestatot `left_index` un `right_index` parametrus uz `True`. Vispirms izveidosim divus jaunus DataFrames ar indeksiem:

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

Šeit ir datu rāmji:

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

Tagad mēs varam veikt `JOIN` operācijas, izmantojot indeksus:

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

Rezultāts ir `JOIN`, kas izmanto indeksus no DataFrames:

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


This is a markdown version of: [https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/python-pandas-dataframe-apvienosana/](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/python-pandas-dataframe-apvienosana/) for AI/LLM consumption.