Przykłady Pandas concat()

Photo of author

By maciekx

Praktyczne aspekty wykorzystania funkcji Pandas concat()

Funkcja concat() biblioteki Pandas stanowi istotne narzędzie do scalania różnorodnych struktur danych DataFrame w pojedynczą całość. Jest niezastąpiona podczas pracy z rozbudowanymi zbiorami danych, pozwalając na efektywne ujednolicanie informacji z wielu źródeł. W tym opracowaniu zgłębimy szczegółowe przykłady oraz omówimy zastosowanie funkcji concat() w konkretnych sytuacjach.

Scalanie ramek danych w układzie pionowym (dodawanie wierszy)

Najczęstszym sposobem użycia concat() jest łączenie ramek danych wzdłuż osi pionowej, co oznacza dopisywanie wierszy z jednej ramki do drugiej. To szczególnie przydatne, gdy dysponujemy wieloma plikami danych lub tabelami o podobnej strukturze, które pragniemy połączyć w jeden spójny zbiór.

Sposób zapisu składni w przypadku łączenia ramek danych pionowo:

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

Parametr ignore_index z ustawioną wartością True sprawia, że funkcja concat() ignoruje oryginalne indeksy ramek i przypisuje nowe, sekwencyjne indeksy do scalonej ramki.

Przykład 1: Łączenie ramek o identycznej liczbie kolumn

Rozważmy sytuację, w której mamy dwie ramki, df1 i df2, przechowujące dane o sprzedaży w różnych punktach handlowych:

python
import pandas as pd

df1 = pd.DataFrame({’Sklep’: [’A’, 'B’, 'C’],
'Sprzedaż’: [100, 200, 300]})

df2 = pd.DataFrame({’Sklep’: [’D’, 'E’, 'F’],
'Sprzedaż’: [400, 500, 600]})

Łącząc te ramki w pionie, utworzymy nową ramkę, która zawiera wszystkie dane o sprzedaży:

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

print(df_polaczony)

Rezultat:


Sklep Sprzedaż
0 A 100
1 B 200
2 C 300
3 D 400
4 E 500
5 F 600

Przykład 2: Łączenie ramek danych o zróżnicowanej liczbie kolumn

Funkcja concat() umożliwia również łączenie ramek o różnej liczbie kolumn. W takich przypadkach brakujące wartości są uzupełniane wartościami NaN. Przykładowo, jeśli df3 zawiera dodatkową kolumnę o nazwie Dochód:

python
df3 = pd.DataFrame({'Sklep': ['G', 'H', 'I'],
'Sprzedaż': [700, 800, 900],
'Dochód': [100, 200, 300]})

Scalając te ramki w układzie pionowym:

python
df_polaczony = pd.concat([df1, df2, df3], ignore_index=True)

Otrzymamy:


Sklep Sprzedaż Dochód
0 A 100 NaN
1 B 200 NaN
2 C 300 NaN
3 D 400 NaN
4 E 500 NaN
5 F 600 NaN
6 G 700 100
7 H 800 200
8 I 900 300

Scalanie ramek danych w układzie poziomym (dodawanie kolumn)

Oprócz łączenia ramek danych pionowo, funkcja concat() pozwala również na ich łączenie w poziomie, co oznacza dołączanie kolumn z jednej ramki do drugiej. To rozwiązanie jest szczególnie przydatne, gdy dysponujemy ramkami, które zawierają podobne wiersze, a chcemy zgromadzić je w pojedynczy zestaw danych.

Składnia łączenia ramek danych w poziomie:

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

Ustawienie parametru axis na 1 nakazuje funkcji concat() łączenie ramek w poziomie, czyli dodawanie nowych kolumn.

Przykład 3: Łączenie ramek danych o tych samych indeksach wierszy

Przyjmijmy, że mamy dwie ramki danych, df4 i df5, które zawierają informacje o sprzedaży oraz liczbie klientów w różnych sklepach:

python
df4 = pd.DataFrame({'Sklep': ['A', 'B', 'C'],
'Sprzedaż': [100, 200, 300]})

df5 = pd.DataFrame({’Sklep’: [’A’, 'B’, 'C’],
'Liczba klientów’: [10, 20, 30]})

Łącząc te ramki w poziomie, uzyskamy nową ramkę, która zawiera dane zarówno o sprzedaży, jak i o liczbie klientów:

python
df_polaczony = pd.concat([df4, df5], axis=1)

print(df_polaczony)

Wynik:


Sklep Sprzedaż Liczba klientów
0 A 100 10
1 B 200 20
2 C 300 30

Przykład 4: Łączenie ramek danych o różnych indeksach wierszy

Funkcja concat() umożliwia też łączenie ramek danych, które posiadają różne indeksy wierszy. W takim przypadku ramki zostaną połączone w poziomie, a brakujące dane zostaną uzupełnione wartościami NaN.

Na przykład, jeśli df6 zawiera dodatkowe wiersze:

python
df6 = pd.DataFrame({'Sklep': ['D', 'E'],
'Liczba klientów': [40, 50]})

Łącząc te ramki w poziomie:

python
df_polaczony = pd.concat([df4, df5, df6], axis=1)

Otrzymujemy:


Sklep Sprzedaż Liczba klientów
0 A 100 10
1 B 200 20
2 C 300 30
3 D NaN 40
4 E NaN 50

Zaawansowane metody wykorzystania funkcji concat()

Oprócz podstawowego łączenia ramek danych, funkcja concat() oferuje szereg rozbudowanych opcji, które zwiększają jej uniwersalność:

Łączenie wielu ramek danych

Funkcja concat() umożliwia łączenie więcej niż dwóch ramek danych w pojedynczym wywołaniu. Przykładowo, poniższy kod scala cztery ramki danych: df1, df2, df3 i df4:

python
df_polaczony = pd.concat([df1, df2, df3, df4])

Wyznaczanie kluczy łączenia

Parametr keys funkcji concat() pozwala na określenie kolumny lub kolumn, które będą pełnić rolę klucza łączenia. Jest to szczególnie przydatne, gdy łączymy ramki danych zawierające dane hierarchiczne.

python
df_polaczony = pd.concat([df1, df2], keys=['level1', 'level2'])

Porządkowanie ramek danych przed łączeniem

Parametr sort funkcji concat() umożliwia sortowanie ramek danych przed ich połączeniem. Jest to przydatne, gdy chcemy połączyć ramki zawierające zduplikowane wiersze lub gdy istotna jest kolejność łączenia.

python
df_polaczony = pd.concat([df1, df2], sort=True)

Najczęściej zadawane pytania

1. Czym jest funkcja Pandas concat()?

Funkcja Pandas concat() umożliwia łączenie wielu ramek danych w jedną.

2. W jaki sposób łączyć ramki danych w pionie?

Należy zastosować concat([df1, df2, ..., dfn], ignore_index=True).

3. Jak połączyć ramki danych w poziomie?

Należy użyć concat([df1, df2, ..., dfn], axis=1).

4. Czy można łączyć ramki danych o różnej liczbie kolumn?

Tak, funkcja concat() uzupełni brakujące wartości za pomocą wartości NaN.

5. Czy możliwe jest łączenie ramek danych o różnych indeksach wierszy?

Tak, funkcja concat() uzupełni brakujące wartości NaN.

6. W jaki sposób określić klucze łączenia?

Należy wykorzystać parametr keys w funkcji concat().

7. Jak sortować ramki danych przed połączeniem?

Należy zastosować parametr sort w funkcji concat().

8. Jak złączyć wiele ramek danych w jednym wywołaniu?

Należy przekazać listę ramek do funkcji concat(): pd.concat([df1, df2, df3]).


newsblog.pl