Pandas to darmowa biblioteka w języku Python, która w znaczny sposób rozszerza możliwości analizy i przetwarzania danych. Biblioteka ta jest jednym z najważniejszych narzędzi w środowisku Python. Używana jest powszechnie jako wsparcie w różnych obszarach przemysłu. Po przeczytaniu tego artykułu dowiesz się, jak łatwo wczytywać, przetwarzać i analizować dane w Pythonie. Ta umiejętność jest ceniona w wielu dziedzinach, od finansów po rozwiązywanie problemów inżynierskich.
- 1. Biblioteki Python: Pandas. Dlaczego warto ją poznać?
- 2. Kiedy sprawdzi się biblioteka Pandas?
- 3. Przykładowe zastosowania biblioteki Pandas.
- 4. Jak zainstalować Pandas?
- 5. Jak zaimportować Pandas do swojego projektu?
- 6. Ramki danych i serie – Pandas DataFrame i Series
- 7. Wczytywanie danych z różnych źródeł
- 8. Podstawowe operacje na danych
- 9. Wybieranie, filtrowanie i sortowanie danych
- 10. Użycie funkcji apply i map
- 11. Czyszczenie i naprawa brakujących danych
- 12. Podstawowe operacje statystyczne i grupowanie danych
- 13. Przykładowa analiza danych z użyciem Pandas
- 14. Pandas, porady i najpopularniejsze funkcje (cheat sheet)
- 15. Podsumowanie
Biblioteki Python: Pandas. Dlaczego warto ją poznać?
Biblioteka została stworzona, aby ułatwić pracę z różnego rodzaju danymi, które nie zawsze są kompletne lub wymagają odpowiedniej obróbki w celu ich dalszego przetwarzania. Pandas dostarcza elastyczne i łatwe w użyciu struktury danych i narzędzia (chociaż nie zawsze wydajne, w dalszej części zdradzę, w jaki sposób sobie z tym poradzić). Obok takich bibliotek jak NumPy, Matplotlib, Seaborn czy Scikit-Learn przez wiele lat, biblioteka Pandas zapracowała na popularność i uznanie wśród kadry akademickiej, analityków, inżynierów i pasjonatów zainteresowanych pracą z danymi.
Jest to idealne narzędzie do zarządzania danymi i analizowania ich (z pomocą dodatkowych bibliotek) w małych i średnich zbiorach. W przypadku zbiorów rozległych, popularnych w obszarze związanym z Big Data, przetwarzanie jest możliwe, ale wraz ze wzrostem ilości danych, rośnie prawdopodobieństwo problemów z pamięcią i wydajnością.
Kiedy sprawdzi się biblioteka Pandas?
Biblioteka Pandas jest dobrze przystosowana do pracy z wykorzystaniem różnych typów i źródeł danych:
- Tablicowe dane z kolumnami różnego typu (np. Excel, SQL)
- Szeregi czasowe (time-series)
- Dane z etykietami wierszy i kolumn (labeled data)
Przykładowe zastosowania biblioteki Pandas
Oto kilka przykładów zastosowań biblioteki Pandas:
- Wczytywanie różnych formatów danych (CSV, Excel, SQL, pliki płaskie itd.)
- Filtrowanie, sortowanie i inne operacje z danymi
- Czyszczenie danych (usuwanie wartości NaN – Not a Number), uśrednianie, zastępowanie wartości itp.)
- Szybkie i efektywne obliczanie statystyk i przeprowadzanie operacji na danych
- Wizualizacja danych za pomocą wykresów
Zanim zaczniemy korzystać z biblioteki Pandas, upewnijmy się, że jest ona zainstalowana w środowisku Python.
Jak zainstalować Pandas?
Instalacja Pandas jest bardzo prosta i może zostać wykonana za pomocą narzędzia pip, które jest domyślnym menedżerem pakietów Python. Zakładam, że Python jest już zainstalowany na twoim komputerze, a jeżeli nie – tutaj jest instrukcja, jak to zrobić.
Następnie wystarczy otworzyć terminal i wpisać poniższą komendę:
pip install pandas
Możliwe, że będzie wymagane nadanie uprawnień do wykonania tej komendy (np. przy użyciu sudo na systemach Unixowych lub uruchamiając terminal z prawami administratora w systemie Windows), a w przypadku korzystania z konkretnego wirtualnego środowiska Python (np. venv lub conda), konieczne będzie aktywowanie tego środowiska przed zainstalowaniem pakietu. Więcej o wirtualnych środowiskach przeczytasz w dokumentacji.
Jeżeli używasz Anacondy, możesz zainstalować Pandas za pomocą polecenia:
conda install pandas
Jak zaimportować Pandas do swojego projektu?
Gdy biblioteka Pandas jest już zainstalowana, możemy zacząć z niej korzystać. Pierwszym krokiem jest zaimportowanie biblioteki do naszego skryptu lub projektu. Import biblioteki Pandas nie różni się niczym od jakiejkolwiek innej biblioteki w Pythonie.
Możemy to zrobić za pomocą poniższego kodu:
import pandas as pd
W Pythonie Pandas zazwyczaj importuje się pod aliasem ‘pd’, który jest krótkim i powszechnie przyjętym skrótem. Teraz, kiedy chcemy użyć funkcji z biblioteki Pandas, zamiast wpisywać pełne słowo „pandas”, używamy skrótu „pd”. Analogicznie sytuacja wygląda w przypadku biblioteki NumPy (‘np’), o której pisałem w jednym z poprzednich artykułów.
Przykładowo, jeśli chcielibyśmy stworzyć DataFrame (jedną z kluczowych struktur danych w Pandas), kod wyglądałby następująco:
import pandas as pd data = { 'column_1': [3, 2, 0, 1], 'column_2': [0, 3, 7, 2] } example_df = pd.DataFrame(data) print(example_df)
Jak widać na powyższym przykładzie, użyłem klasy DataFrame, podstawowej struktury, którą udostępnia nam Pandas. W kolejnym rozdziale omówimy inne dwie podstawowe struktury danych – Series i DataFrame.
Ramki danych i serie – Pandas DataFrame i Series
Głównym celem biblioteki Pandas jest ułatwienie pracy z danymi, dlatego Pandas wprowadza dwie struktury danych: Series i DataFrame. Zrozumienie tych struktur jest kluczowe do efektywnego korzystania z tej biblioteki.
Series
Series to jednowymiarowa struktura danych, a właściwie tablicy (ndarray), podobna do listy lub kolumny w tabeli. Każdy element (np. liczby całkowite, listy, obiekty, tuple) w Series ma przypisany identyfikator, który nazywany jest indeksem. Series przechowuje dane jednego typu.
Przykładowo, stworzenie Series, który zawiera listę elementów, może wyglądać tak:
import pandas as pd vals_sr = pd.Series(["Val_1", "Val_2", "Val_3", "Val_4", "Val_5"]) print(vals_sr)
Jeżeli chodzi o indeks, to domyślnie są to liczby całkowite (integer), zaczynając od zera. Indeks można zmienić, np. nadając etykiety. W takim przypadku należy rozszerzyć nasz kod odpowiedzialny za tworzenie Series. Służy do tego parametr index, a kod wygląda następująco:
import pandas as pd vals_sr = pd.Series(["Val_1", "Val_2", "Val_3", "Val_4", "Val_5"], index=["A", "B", "C", "D", "E"]) print(vals_sr)
Warto pamiętać, że liczba “etykiet” powinna odpowiadać liczbie elementów w Series. W przeciwnym razie Python interpreter zwróci nam błąd (ValueError). Jeżeli nie chcesz wyświetlać całego Series, a jedynie sprawdzić, jakie indeksy zostały nadane lub wyświetlić tylko wartości bez indeksów, możesz skorzystać z następującego fragmentu kodu:
import pandas as pd vals_sr = pd.Series(["Val_1", "Val_2", "Val_3", "Val_4", "Val_5"], index=["A", "B", "C", "D", "E"]) print(vals_sr) print(vals_sr.index) # -- zwraca obiekty typu Index print(vals_sr.values) # -- zwraca obiekt typu ndarray
DataFrame
DataFrame to dwuwymiarowa struktura danych podobna do tabeli w bazie danych lub arkusza kalkulacyjnego Excela. DataFrame składa się z wierszy i kolumn – każda kolumna w DataFrame to Series. Jak pewnie się domyślasz, mimo że dana kolumna zawiera tylko jeden typ danych, to DataFrame może zawierać wiele kolumn, z których każda ma dane innego typu. Przykładem może być utworzenie DataFrame z danych na temat transakcji dokonywanych przez klientów, których identyfikujemy po ID.
import pandas as pd ct_data = { 'client_id': ['C34P', 'C35S', 'C35P', 'C97S', 'C58S'], 'card_transactions': [11, 244, 31, 458, 63] } client_transaction_df = pd.DataFrame(ct_data) print(client_transaction_df)
Wczytywanie danych z różnych źródeł
Jedną z najważniejszych zalet biblioteki Pandas jest łatwość, z jaką można wczytać dane z różnych źródeł i formatów plików. Do najpopularniejszych należą:
- CSV
- Excel (.xlsx)
- SQL
- Pliki płaskie (flat files, np. plik tekstowy)
Dane z pliku CSV można wczytać do DataFrame za pomocą funkcji pd.read_csv().
import pandas as pd df = pd.read_csv('path_to_your_file.csv') print(df)
Podobnie, możemy wczytać plik Excela za pomocą funkcji pd.read_excel().
import pandas as pd df = pd.read_excel('path_to_your_file.xlsx') print(df)
Aby wczytać wynik zapytania SQL, musimy najpierw utworzyć połączenie do bazy danych. Na przykładzie bazy danych SQLite możemy zrobić to w następujący sposób:
import pandas as pd import sqlite3 # Ustanawianie połączenia do bazy danych conn = sqlite3.connect("database_name.db") # Wykonanie zapytania df = pd.read_sql_query("SELECT * FROM my_table", conn) print(df)
Zakładając, że korzystasz z innej bazy danych, musisz zainstalować odpowiedni sterownik dla Pythona i zastąpić sqlite3.connect odpowiednim połączeniem. Jeżeli chcesz dowiedzieć się więcej na temat sqlite, zachęcam cię do odwiedzenia dokumentacji sqlite3.
W następnym rozdziale omówimy podstawowe operacje na danych z wykorzystaniem Series i DataFrame.
Podstawowe operacje na danych
Kiedy już wiesz, jak wczytać dane za pomocą biblioteki Pandas, skupimy się teraz na wybieraniu, filtrowaniu i sortowaniu danych oraz zastosowaniu funkcji apply i map.
Wybieranie, filtrowanie i sortowanie danych
Jedną z podstawowych i najczęściej używanych operacji jest wybieranie określonych danych z DataFrame. Pandas umożliwia wybieranie danych na wiele sposobów:
- Wybieranie kolumn: df[’nazwa_kolumny’]
- Wybieranie wierszy za pomocą numerów indeksów: df.iloc[indeks]
- Wybieranie wierszy za pomocą etykiet indeksów: df.loc[etykieta]
Przykładowy fragment kodu zamieszczam poniżej:
import pandas as pd ct_data = { 'client_id': ['C34P', 'C35S', 'C35P', 'C97S', 'C58S'], 'count': [11, 244, 31, 458, 63] } df = pd.DataFrame(ct_data) print(df) # Wybieranie kolumny 'client_id' print(df['client_id']) # Wybieranie pierwszego wiersza print(df.iloc[0]) # Wybieranie wiersza o etykiecie indeksu zero print(df.loc[0])
Filtrowanie to proces wybierania podzbioru danych na podstawie zadanych kryteriów. Przykładowo, możemy chcieć wybrać tylko te transakcje, które są dostępne w ilości większej niż 60:
filtered_df = df[df['count'] > 60] print(filtered_df)
Sortowanie danych jest prostym procesem, który możemy przeprowadzić za pomocą metody sort_values():
sorted_df = df.sort_values('count') print(sorted_df)
Operacje na kolumnach: dodawanie, usuwanie, zmiana nazw
Aby dodać nową kolumnę do DataFrame, możemy po prostu przypisać dane do nowej kolumny, jak w poniższym przykładzie:
df['amount'] = [1200, 4500, 3000, 28000, 700] # -- dodajemy kolumnę z sumą kwot, na które wykonano transakcje print(df)
Aby usunąć kolumnę, skorzystamy z metody drop():
df = df.drop('amount', axis=1) print(df)
Zmiana nazwy kolumny jest możliwa za pomocą metody rename():
df = df.rename(columns={'client_id': 'client_code', 'count': 'quantity'}) print(df)
Użycie funkcji apply i map
Funkcje apply i map pozwalają na zastosowanie wybranej funkcji do każdego elementu zapisanego w Series lub DataFrame. Przykładowo, użycie funkcji z biblioteki NumPy dla kolumny ‘quantity’.
import numpy as np df['log_quantity'] = df['quantity'].apply(np.log) print(df)
Metoda map jest podobna do apply, ale działa tylko na Series. Jest często używana do zamiany wartości na podstawie słownika. Przykładowo, dla listy klientów chcemy dodać dodatkową cyfrę w identyfikatorze.
code_map = { 'C34P': '0C34P', 'C35S': '1C35S', 'C35P': '1C35P', 'C97S': '0C97S', 'C58S': '0C58S' } df['client_code'] = df['client_code'].map(code_map) print(df)
Czyszczenie i naprawa brakujących danych
Praca z danymi, które pochodzą ze źródeł rzeczywistych, praktycznie zawsze wiąże się z koniecznością ich czyszczenia lub poprawiania. Często dane zawierają braki, duplikaty lub typy danych, które nie są odpowiednie do planowanej analizy. W tym rozdziale omówię proste sytuacje i pokażę ci, jak radzić sobie z takimi problemami za pomocą narzędzi z biblioteki Pandas.
Obsługa brakujących danych (NaN)
Brakujące dane są oznaczane jako NaN (Not a Number). Pandas oferuje kilka metod do obsługi brakujących danych i są to np.:
- Wypełnianie brakujących danych określoną wartością
- Usuwanie wierszy z brakującymi danymi
Metoda fillna() pozwala na wypełnienie brakujących danych określoną wartością lub za pomocą określonej metody (np. ’forward fill’ – ffill, ’backward fill’ – bfill):
import numpy as np data = { 'A': [1, 2, np.nan], 'B': [5, np.nan, np.nan], 'C': [1, 2, 3] } df = pd.DataFrame(data) df_filled_zeros = df.fillna(value=0) # --Wypełniamy brakujące dane wartością 0 print(df_filled_zeros)
Możliwe jest też usunięcie wierszy, które zawierają brakujące dane. W przypadku dużego zbioru i niewielkiej liczby “zepsutych” wierszy nie powinno mieć to dużego wpływu na jakość danych, ale przy niewielkim zbiorze usunięcie kilku wierszy może znacząco wpłynąć na późniejszą analizę. Jeżeli jednak zdecydujesz się na usunięcie wybranych wierszy, to możesz użyć metody dropna():.
df_dropped = df.dropna() # Usuwamy wiersze z brakującymi danymi print(df_dropped)
Czasami dochodzi do sytuacji, że w naszym zbiorze znajduje się wiele duplikatów, które z punktu widzenia analizy są zbędne. Usunięcie duplikatów jest przydatne szczególnie w sytuacji, gdy stanowią one większość naszego zbioru. Pozbycie się ich pozwoli na odciążenie biblioteki i wydajniejsze operacje np. na kolumnach w DataFrame. Pandas dostarcza metodę drop_duplicates(), która pozwala na łatwe usunięcie duplikatów:
data = { 'client_id': ['C34P', 'C35S', 'C35P', 'C35P','C97S', 'C58S', 'C58S'], 'count': [11, 244, 31, 31, 458, 63, 63] } df = pd.DataFrame(data) df = df.drop_duplicates() # Usuwamy duplikaty print(df)
Więcej o pracy z brakującymi danymi dowiesz się z obszernej dokumentacji na Pydata.org.
Jeżeli pracujesz na danych dostarczanych przez inne osoby lub firmy, możesz spotkać się z danymi numerycznymi (liczby całkowite, cyfry, liczby zmiennoprzecinkowe), które przedstawione są jako ciągi znaków (string). Czyli np. liczba całkowita 200 w DataFrame zapisana jest jako string o wartości ‘200’. Interpreter potraktuje to jako tekst, a nie liczbę. Jeżeli chcesz wykonywać na takich danych operacje statystyczne lub matematyczne, konieczne jest zmienienie typu danych kolumny (w tym przypadku z ‘str’ na ‘int’). Możemy to zrobić za pomocą metody astype():
import pandas as pd data = { 'client_id': ['C34P', 'C35S', 'C35P', 'C97S', 'C58S'], 'count': ['11', '244', '31', '458', '63'] } df = pd.DataFrame(data) df['count'] = df['count'].astype(int) # Zmieniamy typ danych kolumny 'count' na int print(df)
Podsumowując, czyszczenie danych to zazwyczaj niezbędny krok w procesie przetwarzania i analizy danych. Pandas oferuje wiele narzędzi, które ułatwiają ten proces. Jeżeli chcesz dowiedzieć się więcej o pracy z plikami tekstowymi, oto link do dokumentacji:
- 1. Biblioteki Python: Pandas. Dlaczego warto ją poznać?
- 2. Kiedy sprawdzi się biblioteka Pandas?
- 3. Przykładowe zastosowania biblioteki Pandas.
- 4. Jak zainstalować Pandas?
- 5. Jak zaimportować Pandas do swojego projektu?
- 6. Ramki danych i serie – Pandas DataFrame i Series
- 7. Wczytywanie danych z różnych źródeł
- 8. Podstawowe operacje na danych
- 9. Wybieranie, filtrowanie i sortowanie danych
- 10. Użycie funkcji apply i map
- 11. Czyszczenie i naprawa brakujących danych
- 12. Podstawowe operacje statystyczne i grupowanie danych
- 13. Przykładowa analiza danych z użyciem Pandas
- 14. Pandas, porady i najpopularniejsze funkcje (cheat sheet)
- 15. Podsumowanie