Mester Pandas concat(): Komplett Guide med Eksempler


Eksempler på bruk av Pandas `concat()`

Introduksjon

Pandas-bibliotekets `concat()`-funksjon er et svært nyttig verktøy for å kombinere flere DataFrame-objekter, enten langs radene eller kolonnene. Denne artikkelen vil gi en grundig innføring i hvordan man bruker `concat()` i Pandas, med en rekke eksempler som viser de ulike mulighetene.

Sammenslåing av DataFrames langs rader

Grunnleggende bruk av `concat()`

Følgende kode demonstrerer den enkleste formen for sammenslåing av DataFrames:


import pandas as pd

df1 = pd.DataFrame({'Navn': ['Ola', 'Kari', 'Per'],
                   'Alder': [25, 30, 35]})
df2 = pd.DataFrame({'Navn': ['Anne', 'Bent', 'Cecilie'],
                   'Alder': [40, 45, 50]})

df_konk = pd.concat([df1, df2], ignore_index=True)

print(df_konk)

Resultatet av denne operasjonen ser slik ut:


   Navn  Alder
0   Ola     25
1   Kari     30
2   Per     35
3  Anne     40
4  Bent     45
5  Cecilie  50

`concat()` med indekser

Dette eksemplet viser hvordan du beholder og bruker indekser fra de opprinnelige DataFrame-ene ved sammenslåing:


import pandas as pd

df1 = pd.DataFrame({'Navn': ['Ola', 'Kari', 'Per'],
                   'Alder': [25, 30, 35]})
df1.index = ['Ola', 'Kari', 'Per']

df2 = pd.DataFrame({'Navn': ['Anne', 'Bent', 'Cecilie'],
                   'Alder': [40, 45, 50]})
df2.index = ['Anne', 'Bent', 'Cecilie']

df_konk = pd.concat([df1, df2], ignore_index=True, keys=['DF1', 'DF2'])

print(df_konk)

Output viser at vi har beholdt de opprinnelige indeksene:


   Level_0 Navn  Alder
0       DF1  Ola     25
1       DF1  Kari     30
2       DF1  Per     35
3       DF2  Anne     40
4       DF2  Bent     45
5       DF2  Cecilie  50

Håndtering av inkonsekvente indekser

Dette eksemplet viser hva som skjer når DataFrame-ene har overlappende indekser og hvordan de behandles under sammenslåing:


import pandas as pd

df1 = pd.DataFrame({'Navn': ['Ola', 'Kari', 'Per'],
                   'Alder': [25, 30, 35]})
df1.index = ['Ola', 'Kari', 'Lars']

df2 = pd.DataFrame({'Navn': ['Anne', 'Bent', 'Cecilie'],
                   'Alder': [40, 45, 50]})
df2.index = ['Anne', 'Bent', 'Mari']

df_konk = pd.concat([df1, df2], ignore_index=False, keys=['DF1', 'DF2'])

print(df_konk)

Her er utskriften, hvor overlappende indekser genererer `NaN` verdier:


       Navn  Alder   Navn  Alder
Ola     Ola     25  Anne   Anne     40
Kari     Kari     30  Bent   Bent     45
Lars    Per     35  Mari   Cecilie  50
       None    None  None   None     None

Sammenslåing av DataFrames langs kolonner

Grunnleggende kolonne-sammenslåing

Her ser vi hvordan DataFrames kombineres horisontalt ved å bruke `axis=1`:


import pandas as pd

df1 = pd.DataFrame({'Navn': ['Ola', 'Kari', 'Per'],
                   'Alder': [25, 30, 35]})

df2 = pd.DataFrame({'Yrke': ['Lærer', 'Ingeniør', 'Lege']})

df_konk = pd.concat([df1, df2], axis=1)

print(df_konk)

Output gir oss en DataFrame med kolonner fra begge de originale DataFrame-ene:


   Navn  Alder    Yrke
0   Ola     25    Lærer
1   Kari     30  Ingeniør
2   Per     35    Lege

Kolonne-sammenslåing med overlappende kolonner

Dette eksemplet viser hva som skjer når vi har kolonnenavn som er like i begge DataFrame-ene:


import pandas as pd

df1 = pd.DataFrame({'Navn': ['Ola', 'Kari', 'Per'],
                   'Alder': [25, 30, 35],
                   'Yrke': ['Lærer', 'Ingeniør', 'Lege']})

df2 = pd.DataFrame({'Navn': ['Anne', 'Bent', 'Cecilie'],
                   'Yrke': ['Sykepleier', 'Advokat', 'Journalist']})

df_konk = pd.concat([df1, df2], axis=1, join='inner')

print(df_konk)

Når vi spesifiserer `join=’inner’`, blir kun de radene som finnes i begge DataFrames slått sammen. Her får vi også nye kolonnenavn med suffiks:


   Navn  Alder Yrke_x     Yrke_y
0   Ola     25  Lærer  Sykepleier
1   Kari     30  Ingeniør    Advokat
2   Per     35  Lege    Journalist

Sammenslåing av flere DataFrames

Her ser vi hvordan vi kan slå sammen mer enn to DataFrames samtidig:


import pandas as pd

df1 = pd.DataFrame({'Navn': ['Ola', 'Kari', 'Per'],
                   'Alder': [25, 30, 35]})

df2 = pd.DataFrame({'By': ['Oslo', 'Bergen', 'Trondheim']})

df3 = pd.DataFrame({'Yrke': ['Lærer', 'Ingeniør', 'Lege']})

df_konk = pd.concat([df1, df2, df3], axis=1)

print(df_konk)

Resultatet er en DataFrame som kombinerer kolonner fra alle tre:


   Navn  Alder        By    Yrke
0   Ola     25    Oslo    Lærer
1   Kari     30  Bergen    Ingeniør
2   Per     35 Trondheim    Lege

Konklusjon

Pandas `concat()` er en fleksibel og kraftfull funksjon for å kombinere DataFrames på en rekke måter. Med de forskjellige opsjonene og argumentene kan man lett tilpasse sammenslåingen for ulike behov og problemstillinger. De viste eksemplene i denne artikkelen gir en solid forståelse for hvordan du kan utnytte `concat()` til å håndtere og analysere data på en effektiv måte.

Ofte stilte spørsmål (FAQ)

1. Hva er forskjellen mellom `ignore_index` og `keys` argumentet?
– `ignore_index` genererer en ny, standardisert numerisk indeks for den resulterende DataFrame, mens `keys` brukes til å legge til et hierarki i indeksen basert på navnene til DataFrame-ene som slås sammen.

2. Kan jeg slå sammen DataFrames med forskjellige datatyper i kolonnene?
– Ja, Pandas `concat()` støtter dette, men det kan føre til at noen celler får tomme verdier, eller det kan oppstå andre feil.

3. Hvordan håndterer Pandas overlappende indekser når jeg slår sammen DataFrames?
– Som standard vil Pandas beholde alle indekser, også overlappende. Hvis du ønsker å filtrere eller justere dette, kan du bruke `join`-argumentet for å kontrollere hvordan overlappende indekser håndteres.

4. Kan jeg kombinere DataFrames horisontalt og vertikalt samtidig?
– Nei, `concat()` brukes enten for å slå sammen horisontalt eller vertikalt om gangen. For å kombinere horisontalt kan du bruke `axis=1` og for vertikalt `axis=0`. Du kan også bruke `append()` for å legge til rader vertikalt.

5. Hvilke ytelsesaspekter bør jeg tenke på når jeg bruker `concat()`?
– `concat()` er generelt effektivt, men store DataFrames kan ta tid å behandle. Forbedring av ytelsen kan oppnås ved å unngå unødvendige sammenslåinger og bruke `ignore_index` der det er relevant.

6. Kan jeg bruke `concat()` til å kombinere DataFrames med ulik form?
– DataFrames som skal slås sammen bør ha tilsvarende antall kolonner eller rader for at prosessen skal fungere optimalt.

7. Hva er alternative metoder for å slå sammen DataFrames?
– I tillegg til `concat()` finnes `append()` for vertikal sammenslåing og `join()` for horisontal sammenslåing basert på indekser.

8. Er `concat()` en parallell operasjon?
– Nei, `concat()` utføres sekvensielt, men det finnes måter å parallelisere databehandlingen med andre bibliotek.