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.