Biblioteki Python – Pandas. Poznaj możliwości analizy i przetwarzania danych 

Piotr Ludwinek | Rozwój oprogramowania | 09.08.2023

Jak łatwo wczytywać, przetwarzać i analizować dane w Pythonie? Poznaj darmową bibliotekę w języku Python: Pandas.

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.

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 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 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: Working with text data — pandas 2.0.3 documentation (pydata.org). W kolejnym rozdziale przejdziemy do tematu agregacji i grupowania danych.

Podstawowe operacje statystyczne i grupowanie danych 

Kiedy posiadamy już czyste i poprawnie sformatowane dane, możemy przejść do analizy. W tym rozdziale pokażę ci kilka podstawowych statystyk, grupowanie danych oraz operacjach na indeksach i multiindeksach. 

Obliczanie podstawowych statystyk 

Pandas oferuje funkcje do wykonywania operacji obliczania podstawowych statystyk, takich jak:  

  • średnia,  
  • mediana – środkowa wartość w zbiorze danych,  
  • moda – najczęściej występująca wartość w zbiorze danych, 
  • odchylenie standardowe 

Na przykładzie próbek danych wygenerowanych z użyciem rozkładu Gaussa utworzymy ramkę danych (DataFrame) i wyznaczymy powyższe statystyki. 

import pandas as pd

import numpy as np

data = {

    'A': np.random.normal(0, 1, 100),

    'B': np.random.normal(1, 2, 100),

    'C': np.random.normal(-1, 0.5, 100)

}

df = pd.DataFrame(data)

print(df.mean())  # średnia

print(df.median())  # mediana

print(df.mode())  # moda

print(df.std())  # odchylenie standardowe

Oczywiście na przykładzie tych danych chciałem pokazać ci zasadę działania narzędzi w bibliotece Pandas, a testowanie jej pełnych możliwości na danych rzeczywistych zostawiam tobie. W celu zapoznania się ze specyfikacją omówionych funkcji i wielu innych, które można stosować na DataFrame, zachęcam do odwiedzenia dokumentacji

Grupowanie danych za pomocą funkcji groupby 

Funkcja groupby pozwala na grupowanie danych na podstawie określonych kolumn. Jeżeli korzystasz na co dzień z języka SQL, zagadnienie grupowania nie powinno być ci obce. Do grupowania użyjemy funkcji groupby(). Po zgrupowaniu danych możemy obliczyć statystyki dla każdej grupy: 

import pandas as pd

data = {

'product_id': ['Product_34P', 'Product_34P', 'Store_35S', 'Product_35P', 'Store_97S', 'Product_35P', 'Product_34P', 'Store_58S'],

    'count': [12, 24, 36, 60, 18, 48, 20, 72],

    'price': [1.2, 0.5, 0.75, 1.25, 2.0, 1.3, 0.55, 0.8]

'store': ['EU1', 'UK1', 'EU2', 'EU2', 'UK2', 'EU1', 'UK2', 'EU1']

}

df = pd.DataFrame(data)

grouped = df.groupby('product_id')

print(grouped.mean())  # średnia cena i ilość dla każdego produktu

Operacje na indeksach i multiindeksach 

Indeksy to ważna część omawianych struktur danych w bibliotece Pandas. Indeksy z założenia pozwalają na szybki dostęp do danych. Podstawowe operacje na indeksach to np.: 

  • resetowanie indeksu,  
  • ustawianie nowego indeksu,  
  • sortowanie po indeksie 

Multiindeksy pozwalają na indeksowanie po wielu poziomach, co jest szczególnie przydatne, gdy mamy dane hierarchiczne. Multiindeksy umożliwiają analizę danych na różnych poziomach hierarchii. Na przykład, jeśli mamy zestaw danych dotyczący sprzedaży produktów w różnych krajach i regionach. Pozwala zauważyć globalne tendencje sprzedaży, jak również bardziej szczegółowe tendencje na poziomie wybranych krajów czy regionów. Przykładowy kod znajduje się poniżej. Użyłem utworzonego wcześniej DataFrame z danymi dotyczącymi sprzedaży produktów. 

# Ustawiamy ‘product_id’ jako indeks

df = df.set_index('product_id')

print(df)

# Resetujemy indeks

df = df.reset_index()

print(df)

# Ustawiamy multiindeks

df = df.set_index(['product_id', 'count'])

print(df)

Wizualizacja danych, korzystając z bibliotek Pandas, NumPy i Matplotlib 

Wizualizacja danych to kluczowy element każdej analizy danych. Pomaga w lepszym zrozumieniu struktury danych i ułatwia prezentowanie wyników. Pandas oferuje wbudowane narzędzia do wizualizacji danych, które są oparte na bibliotece Matplotlib. Przykładowy kod utworzenia kilku wykresów zamieszczam poniżej: 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

# Przykładowe dane

df = pd.DataFrame({

   'A': np.random.randn(1000),

   'B': np.random.randn(1000),

   'C': np.random.randn(1000)

})

# Wykres liniowy

df['A'].plot(kind='line')

plt.show()

# Histogram

df['B'].plot(kind='hist', bins=20)

plt.show()

# Wykres punktowy

df.plot(kind='scatter', x='A', y='B')

plt.show()

# Wykres słupkowy

df['C'].value_counts().sort_index().plot(kind='bar')

plt.show()

Przykładowa analiza danych z użyciem Pandas 

Po omówieniu podstawowych funkcji i operacji, jakie oferuje Pandas, przejdziemy do praktycznego przykładu analizy rzeczywistego zestawu danych. Wykorzystamy w tym celu publiczny zbiór danych o przeżywalności pasażerów na Titanicu. Proces można podzielić na następujące kroki: 

  • Wczytywanie i wstępne badanie danych 
  • Czyszczenie danych 
  • Analiza danych 
  • Wizualizacja danych 

Plik CSV z danymi możesz pobrać tutaj PLIK CSV titanic.csv:  

Zaczniemy od wczytania danych i zbadania ich struktury: 

import pandas as pd

# Wczytanie danych

df = pd.read_csv('titanic.csv')

# Wyświetlenie pierwszych 5 wierszy

print(df.head())

# Podstawowe informacje o danych

print(df.info())

Następnie przeprowadzimy podstawowe czyszczenie danych – na przykład usunięcie brakujących wartości: 

# Usunięcie wierszy z brakującymi danymi

df = df.dropna()

W tym przypadku po usunięciu wierszy z brakującymi danymi możemy uznać, że dane gotowe są do analizy. Sprawdźmy, jaki wpływ miała klasa biletu na szanse przeżycia:

# Grupowanie danych według klasy biletu i obliczenie średniej przeżywalności

print(df.groupby('Pclass')['Survived'].mean())

Możemy również zwizualizować nasze wyniki, aby lepiej zrozumieć zależności w danych: c

import matplotlib.pyplot as plt

# Wykres słupkowy przeżywalności według klasy biletu

df.groupby('Pclass')['Survived'].mean().plot(kind='bar')

plt.ylabel('Survival Rate')

plt.show()

Podsumowując, ten prosty przykład pokazuje, jak łatwo można wykorzystać Pandas do wczytywania, czyszczenia, analizy i wizualizacji danych. Zachęcam cię do samodzielnego zapoznania się z przykładowym datasetem (załączonym plikiem CSV) i analizą własnych zależności. 

Pandas, porady i najpopularniejsze funkcje (cheat sheet) 

Podczas pracy na DataFrame (ramka danych) twoją uwagę mogą zwrócić „widok” (view) oraz „kopia” (copy) oryginalnego DataFrame. Jest to istotne z tego względu, że gdy próbujemy przypisać nowe wartości do zestawu danych, to: 

  • Gdy korzystamy z widoku – zmiany wpłyną na oryginalny DataFrame, 
  • Gdy korzystamy z kopii – nie zmienimy oryginalnego DataFrame. 

Warto użyć metody .loc[] lub .iloc[] do wyboru danych i przypisywania wartości w celu uniknięcia niepotrzebnych problemów. 

Dodatkowo Pandas jest w stanie „wywnioskować” automatycznie typy danych podczas ich wczytywania, np. z pliku lub bazy danych. Nie zawsze jest to jednak dokładne lub zgodne z założeniami użytkownika. Dlatego warto skorzystać z metody .dtypes i sprawdzić typy danych w utworzonym DataFrame. Jeżeli coś się nie zgadza, to skorzystaj ze znanej ci już metody .astype() i przekonwertuj wybrane typy danych. 

Jeżeli chodzi o brakujące dane, czyli wartości NaN  to przeprowadzanie operacji na brakujących danych może prowadzić do błędnych lub niespodziewanych wyników. Na przykład suma liczby i wartości NaN daje wartość NaN. Pamiętaj więc o obsłudze brakujących danych np. z wykorzystaniem metod .dropna() oraz .fillna(), aby odpowiednio usunąć lub wypełnić wartościami brakujące dane. 

Jedne z najpopularniejszych funkcji w bibliotece Pandas to: 

Wczytywanie i zapisywanie danych:  

read_csv(), to_csv(), read_excel(), to_excel(), read_sql(), to_sql() 

Wybieranie danych:  

.loc[], .iloc[] 

Manipulacja danymi:  

drop(), rename(), set_index(), reset_index(), pivot(), melt() 

Czyszczenie danych: 

dropna(), fillna(), replace(), duplicated(), drop_duplicates() 

Analiza danych: 

describe(), value_counts(), groupby(), corr() 

Statystyki: 

mean(), median(), min(), max(), std(), quantile() 

Operacje na ciągach znakowych: 

str.lower(), str.upper(), str.contains(), str.replace(), str.split(), str.join() 

Wizualizacja danych: 

plot(), hist(), boxplot() 

Oczywiście wymienione wyżej funkcje posiadają ogromne możliwości parametryzacji, dlatego zachęcam cię do odwiedzenia dokumentacji, żeby lepiej zrozumieć i dostosować ich użycie do swoich indywidualnych potrzeb (sprawdź dokumentację: General functions).   

Podsumowanie

Pandas jest popularną biblioteką, niezbędną w pracy z danymi i w ich analizie w środowisku Python. Powyższe wprowadzenie zdecydowanie nie wyczerpuje tematu, a jedynie pokazuje podstawowe możliwości i wskazuje kierunki, w których możesz zgłębiać możliwości tej biblioteki. Wykorzystanie biblioteki Pandas jest szczególnie wydajne w połączeniu z bibliotekami NumPy, Matplotlib, Seaborn i innymi w zależności od konkretnego zadania.