18. Python – Analiza danych: CSV i Pandas


Analiza danych to proces przetwarzania, czyszczenia i interpretowania danych w celu wyciągnięcia użytecznych informacji. Python jest jednym z najpopularniejszych języków do analizy danych.

Format CSV

CSV (Comma-Separated Values) to prosty format przechowywania danych tabelarycznych w pliku tekstowym.

Imie,Nazwisko,Wiek,Miasto
Jan,Kowalski,25,Warszawa
Anna,Nowak,30,Kraków
Piotr,Wiśniewski,28,Gdańsk

Struktura:

  • Pierwszy wiersz = nagłówki kolumn
  • Kolejne wiersze = dane
  • Separator (najczęściej przecinek)

Python ma wbudowany moduł csv do czytania i zapisywania plików CSV.

Odczyt pliku CSV

import csv

# Odczyt CSV jako lista list
with open('dane.csv', 'r', encoding='utf-8') as plik:
    czytnik = csv.reader(plik)
    
    # Pierwszy wiersz - nagłówki
    naglowki = next(czytnik)
    print(naglowki)  # ['Imie', 'Nazwisko', 'Wiek', 'Miasto']
    
    # Pozostałe wiersze - dane
    for wiersz in czytnik:
        print(wiersz)
        # ['Jan', 'Kowalski', '25', 'Warszawa']
        # ['Anna', 'Nowak', '30', 'Kraków']

Odczyt jako słownik

import csv

# DictReader - każdy wiersz jako słownik
with open('dane.csv', 'r', encoding='utf-8') as plik:
    czytnik = csv.DictReader(plik)
    
    for wiersz in czytnik:
        print(wiersz)
        # {'Imie': 'Jan', 'Nazwisko': 'Kowalski', 'Wiek': '25', 'Miasto': 'Warszawa'}
        
        # Dostęp po kluczu
        print(f"{wiersz['Imie']} {wiersz['Nazwisko']}, {wiersz['Wiek']} lat")

Zapis do CSV

import csv

dane = [
    ['Imie', 'Nazwisko', 'Wiek', 'Miasto'],
    ['Jan', 'Kowalski', 25, 'Warszawa'],
    ['Anna', 'Nowak', 30, 'Kraków'],
    ['Piotr', 'Wiśniewski', 28, 'Gdańsk']
]

# Zapis do CSV
with open('nowe_dane.csv', 'w', newline='', encoding='utf-8') as plik:
    writer = csv.writer(plik)
    writer.writerows(dane)

print("Plik zapisany!")

Ważne: newline='' zapobiega pustym liniom w Windows

Zapis słowników

import csv

dane = [
    {'Imie': 'Jan', 'Nazwisko': 'Kowalski', 'Wiek': 25},
    {'Imie': 'Anna', 'Nazwisko': 'Nowak', 'Wiek': 30},
    {'Imie': 'Piotr', 'Nazwisko': 'Wiśniewski', 'Wiek': 28}
]

with open('slowniki.csv', 'w', newline='', encoding='utf-8') as plik:
    naglowki = ['Imie', 'Nazwisko', 'Wiek']
    writer = csv.DictWriter(plik, fieldnames=naglowki)
    
    writer.writeheader()  # Zapisz nagłówki
    writer.writerows(dane)  # Zapisz dane

print("Plik zapisany!")

Różne separatory

import csv

# CSV z średnikiem jako separator
with open('dane_sredniki.csv', 'r', encoding='utf-8') as plik:
    czytnik = csv.reader(plik, delimiter=';')
    for wiersz in czytnik:
        print(wiersz)

# Zapis z tabulatorem
with open('dane_tab.csv', 'w', newline='', encoding='utf-8') as plik:
    writer = csv.writer(plik, delimiter='\t')
    writer.writerow(['Kolumna1', 'Kolumna2', 'Kolumna3'])

Pandas – profesjonalna analiza danych

Pandas to najpopularniejsza biblioteka do analizy danych w Pythonie.

Instalacja

pip install pandas

Podstawowe struktury danych

Pandas ma dwie główne struktury:

  • Series – jednowymiarowa (jak lista z indeksami)
  • DataFrame – dwuwymiarowa (tabela)

Series – jednowymiarowa seria

import pandas as pd

# Tworzenie Series
s = pd.Series([10, 20, 30, 40, 50])
print(s)
# 0    10
# 1    20
# 2    30
# 3    40
# 4    50
# dtype: int64

# Series z własnymi indeksami
s2 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s2)
# a    10
# b    20
# c    30

# Dostęp do elementów
print(s2['a'])  # 10
print(s2[0])    # 10

DataFrame – tabela danych

DataFrame to główna struktura w Pandas – dwuwymiarowa tabela z kolumnami.

Tworzenie DataFrame

import pandas as pd

# Ze słownika
dane = {
    'Imie': ['Jan', 'Anna', 'Piotr'],
    'Wiek': [25, 30, 28],
    'Miasto': ['Warszawa', 'Kraków', 'Gdańsk']
}

df = pd.DataFrame(dane)
print(df)
#     Imie  Wiek    Miasto
# 0    Jan    25  Warszawa
# 1   Anna    30    Kraków
# 2  Piotr    28    Gdańsk

Z listy list – zagnieżdżone listy

import pandas as pd

dane = [
    ['Jan', 25, 'Warszawa'],
    ['Anna', 30, 'Kraków'],
    ['Piotr', 28, 'Gdańsk']
]

df = pd.DataFrame(dane, columns=['Imie', 'Wiek', 'Miasto'])
print(df)

Z listy słowników

import pandas as pd

dane = [
    {'Imie': 'Jan', 'Wiek': 25, 'Miasto': 'Warszawa'},
    {'Imie': 'Anna', 'Wiek': 30, 'Miasto': 'Kraków'},
    {'Imie': 'Piotr', 'Wiek': 28, 'Miasto': 'Gdańsk'}
]

df = pd.DataFrame(dane)
print(df)

Wczytywanie danych z plików

CSV

import pandas as pd

# Wczytaj CSV
df = pd.read_csv('dane.csv')
print(df)

# Z różnymi opcjami
df = pd.read_csv('dane.csv', 
                 encoding='utf-8',      # Kodowanie
                 sep=';',               # Separator
                 decimal=',',           # Separator dziesiętny
                 thousands=' ')         # Separator tysięcy

# Bez nagłówków
df = pd.read_csv('dane.csv', header=None)

# Własne nazwy kolumn
df = pd.read_csv('dane.csv', names=['Col1', 'Col2', 'Col3'])

Excel

import pandas as pd

# Wymaga: pip install openpyxl

# Wczytaj Excel
df = pd.read_excel('dane.xlsx')

# Konkretny arkusz
df = pd.read_excel('dane.xlsx', sheet_name='Arkusz1')

JSON

import pandas as pd

# Wczytaj JSON
df = pd.read_json('dane.json')

# Z różnymi orientacjami
df = pd.read_json('dane.json', orient='records')

Podstawowe operacje na DataFrame

Podgląd danych

import pandas as pd

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

# Pierwsze 5 wierszy
print(df.head())

# Pierwsze n wierszy
print(df.head(10))

# Ostatnie 5 wierszy
print(df.tail())

# Informacje o DataFrame
print(df.info())
# Wyświetli: typy kolumn, liczbę niepustych wartości

# Statystyki opisowe (dla kolumn numerycznych)
print(df.describe())
# Wyświetli: count, mean, std, min, max, quartiles

# Wymiary (wiersze, kolumny)
print(df.shape)  # (100, 5)

# Nazwy kolumn
print(df.columns)  # Index(['Imie', 'Wiek', 'Miasto'])

# Typy danych
print(df.dtypes)

Dostęp do kolumn

import pandas as pd

df = pd.DataFrame({
    'Imie': ['Jan', 'Anna', 'Piotr'],
    'Wiek': [25, 30, 28],
    'Miasto': ['Warszawa', 'Kraków', 'Gdańsk']
})

# Jedna kolumna (Series)
print(df['Imie'])
# 0      Jan
# 1     Anna
# 2    Piotr

# Lub jako atrybut
print(df.Imie)

# Wiele kolumn (DataFrame)
print(df[['Imie', 'Wiek']])
#     Imie  Wiek
# 0    Jan    25
# 1   Anna    30
# 2  Piotr    28

Dostęp do wierszy

import pandas as pd

df = pd.DataFrame({
    'Imie': ['Jan', 'Anna', 'Piotr'],
    'Wiek': [25, 30, 28],
    'Miasto': ['Warszawa', 'Kraków', 'Gdańsk']
})

# Po indeksie liczbowym - iloc
print(df.iloc[0])  # Pierwszy wiersz
# Imie          Jan
# Wiek           25
# Miasto    Warszawa

print(df.iloc[0:2])  # Pierwsze dwa wiersze

# Po etykiecie indeksu - loc
df_indexed = df.set_index('Imie')
print(df_indexed.loc['Anna'])
# Wiek          30
# Miasto    Kraków

# Konkretna komórka
print(df.iloc[0, 1])  # Wiersz 0, kolumna 1 → 25
print(df.loc[0, 'Wiek'])  # Wiersz 0, kolumna 'Wiek' → 25

Filtrowanie danych

import pandas as pd

df = pd.DataFrame({
    'Imie': ['Jan', 'Anna', 'Piotr', 'Ewa'],
    'Wiek': [25, 30, 28, 22],
    'Miasto': ['Warszawa', 'Kraków', 'Gdańsk', 'Warszawa']
})

# Filtruj wiek > 25
starsi = df[df['Wiek'] > 25]
print(starsi)
#     Imie  Wiek   Miasto
# 1   Anna    30   Kraków
# 2  Piotr    28   Gdańsk

# Filtruj miasto
warszawiacy = df[df['Miasto'] == 'Warszawa']
print(warszawiacy)

# Wiele warunków (& = and, | = or)
mlodzi_z_warszawy = df[(df['Wiek'] < 30) & (df['Miasto'] == 'Warszawa')]
print(mlodzi_z_warszawy)

# isin() - czy wartość w liście
krakowskie = df[df['Miasto'].isin(['Kraków', 'Gdańsk'])]
print(krakowskie)

Dodawanie i usuwanie kolumn

import pandas as pd

df = pd.DataFrame({
    'Imie': ['Jan', 'Anna', 'Piotr'],
    'Wiek': [25, 30, 28]
})

# Dodaj nową kolumnę
df['Pensja'] = [5000, 6000, 5500]
print(df)
#     Imie  Wiek  Pensja
# 0    Jan    25    5000
# 1   Anna    30    6000
# 2  Piotr    28    5500

# Oblicz nową kolumnę z istniejącej
df['Wiek_za_10_lat'] = df['Wiek'] + 10
print(df)

# Usuń kolumnę
df = df.drop('Wiek_za_10_lat', axis=1)
# Lub in-place
df.drop('Pensja', axis=1, inplace=True)
print(df)

Sortowanie

import pandas as pd

df = pd.DataFrame({
    'Imie': ['Jan', 'Anna', 'Piotr'],
    'Wiek': [25, 30, 28],
    'Pensja': [5000, 6000, 5500]
})

# Sortuj po wieku (rosnąco)
df_sorted = df.sort_values('Wiek')
print(df_sorted)

# Sortuj malejąco
df_sorted = df.sort_values('Wiek', ascending=False)
print(df_sorted)

# Sortuj po wielu kolumnach
df_sorted = df.sort_values(['Wiek', 'Pensja'], ascending=[True, False])
print(df_sorted)

# In-place
df.sort_values('Wiek', inplace=True)

Grupowanie i agregacja

import pandas as pd

df = pd.DataFrame({
    'Miasto': ['Warszawa', 'Kraków', 'Warszawa', 'Gdańsk', 'Kraków'],
    'Wiek': [25, 30, 28, 22, 35],
    'Pensja': [5000, 6000, 5500, 4500, 6500]
})

# Grupuj po mieście i oblicz średnią
srednie = df.groupby('Miasto')['Pensja'].mean()
print(srednie)
# Miasto
# Gdańsk       4500.0
# Kraków       6250.0
# Warszawa     5250.0

# Wiele agregacji
agregacja = df.groupby('Miasto').agg({
    'Wiek': 'mean',
    'Pensja': ['min', 'max', 'mean']
})
print(agregacja)

# Policz wystąpienia
liczebnosc = df.groupby('Miasto').size()
print(liczebnosc)

Brakujące dane

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, 7, 8],
    'C': [9, 10, 11, 12]
})

# Sprawdź brakujące wartości
print(df.isnull())
#        A      B      C
# 0  False  False  False
# 1  False   True  False
# 2   True  False  False
# 3  False  False  False

# Zlicz brakujące
print(df.isnull().sum())
# A    1
# B    1
# C    0

# Usuń wiersze z brakującymi
df_clean = df.dropna()
print(df_clean)

# Wypełnij brakujące wartością
df_filled = df.fillna(0)
print(df_filled)

# Wypełnij średnią
df['A'] = df['A'].fillna(df['A'].mean())
print(df)

Zapisywanie danych

import pandas as pd

df = pd.DataFrame({
    'Imie': ['Jan', 'Anna', 'Piotr'],
    'Wiek': [25, 30, 28]
})

# Do CSV
df.to_csv('wynik.csv', index=False)  # index=False = bez numeru wiersza

# Do Excel
df.to_excel('wynik.xlsx', index=False, sheet_name='Dane')

# Do JSON
df.to_json('wynik.json', orient='records', indent=2)

print("Pliki zapisane!")

Praktyczne przykłady

Przykład 1: Analiza sprzedaży

import pandas as pd

# Dane sprzedażowe
sprzedaz = pd.DataFrame({
    'Produkt': ['Laptop', 'Mysz', 'Klawiatura', 'Laptop', 'Mysz'],
    'Cena': [3000, 50, 200, 3000, 50],
    'Ilosc': [2, 10, 5, 1, 15],
    'Miasto': ['Warszawa', 'Kraków', 'Warszawa', 'Gdańsk', 'Kraków']
})

# Wartość sprzedaży
sprzedaz['Wartosc'] = sprzedaz['Cena'] * sprzedaz['Ilosc']

# Całkowita sprzedaż
print(f"Całkowita sprzedaż: {sprzedaz['Wartosc'].sum()} zł")

# Sprzedaż po produktach
po_produktach = sprzedaz.groupby('Produkt')['Wartosc'].sum()
print("\nSprzedaż po produktach:")
print(po_produktach)

# Najlepiej sprzedający się produkt
najlepszy = po_produktach.idxmax()
print(f"\nNajlepszy produkt: {najlepszy}")

Przykład 2: Czyszczenie danych

import pandas as pd
import numpy as np

# Dane z błędami
df = pd.DataFrame({
    'Imie': ['Jan', 'ANNA', 'piotr', '  Ewa  '],
    'Wiek': [25, 200, -5, 30],  # Błędne wartości
    'Email': ['jan@test.com', 'invalid', 'piotr@test.com', 'ewa@test.com']
})

print("PRZED czyszczeniem:")
print(df)

# Normalizuj imiona
df['Imie'] = df['Imie'].str.strip().str.title()

# Popraw wiek (ustal realistyczne granice)
df.loc[(df['Wiek'] < 0) | (df['Wiek'] > 120), 'Wiek'] = np.nan
df['Wiek'] = df['Wiek'].fillna(df['Wiek'].median())

# Waliduj email (prosty sposób)
df['Email_OK'] = df['Email'].str.contains('@')

print("\nPO czyszczeniu:")
print(df)

Przykład 3: Analiza ocen uczniów

import pandas as pd

oceny = pd.DataFrame({
    'Uczen': ['Jan', 'Anna', 'Piotr', 'Jan', 'Anna', 'Piotr'],
    'Przedmiot': ['Matematyka', 'Matematyka', 'Matematyka', 
                  'Polski', 'Polski', 'Polski'],
    'Ocena': [4, 5, 3, 5, 4, 4]
})

# Średnia po uczniach
srednie_uczniow = oceny.groupby('Uczen')['Ocena'].mean()
print("Średnie uczniów:")
print(srednie_uczniow)

# Średnia po przedmiotach
srednie_przedmiotow = oceny.groupby('Przedmiot')['Ocena'].mean()
print("\nŚrednie przedmiotów:")
print(srednie_przedmiotow)

# Najlepszy uczeń
najlepszy = srednie_uczniow.idxmax()
print(f"\nNajlepszy uczeń: {najlepszy} (średnia: {srednie_uczniow.max():.2f})")

# Tabela przestawna
pivot = oceny.pivot_table(
    values='Ocena',
    index='Uczen',
    columns='Przedmiot',
    aggfunc='mean'
)
print("\nTabela przestawna:")
print(pivot)

Przykład 4: Łączenie danych

import pandas as pd

# Dane uczniów
uczniowie = pd.DataFrame({
    'ID': [1, 2, 3],
    'Imie': ['Jan', 'Anna', 'Piotr']
})

# Dane ocen
oceny = pd.DataFrame({
    'ID_ucznia': [1, 1, 2, 3],
    'Przedmiot': ['Matematyka', 'Polski', 'Matematyka', 'Polski'],
    'Ocena': [4, 5, 5, 3]
})

# Połącz (merge) - jak JOIN w SQL
polaczone = pd.merge(uczniowie, oceny, 
                      left_on='ID', 
                      right_on='ID_ucznia')

print(polaczone)
#    ID  Imie  ID_ucznia   Przedmiot  Ocena
# 0   1   Jan          1  Matematyka      4
# 1   1   Jan          1      Polski      5
# 2   2  Anna          2  Matematyka      5
# 3   3 Piotr          3      Polski      3

Pandas – przydatne metody

Unikalne wartości

import pandas as pd

df = pd.DataFrame({
    'Miasto': ['Warszawa', 'Kraków', 'Warszawa', 'Gdańsk', 'Kraków']
})

# Unikalne wartości
print(df['Miasto'].unique())
# ['Warszawa' 'Kraków' 'Gdańsk']

# Liczba unikalnych
print(df['Miasto'].nunique())  # 3

# Zlicz wystąpienia
print(df['Miasto'].value_counts())
# Warszawa    2
# Kraków      2
# Gdańsk      1

Zastosuj funkcję

import pandas as pd

df = pd.DataFrame({
    'Liczba': [1, 2, 3, 4, 5]
})

# apply() - zastosuj funkcję do każdego elementu
df['Kwadrat'] = df['Liczba'].apply(lambda x: x ** 2)
print(df)

# apply() z własną funkcją
def klasyfikuj(x):
    if x < 3:
        return 'Mała'
    else:
        return 'Duża'

df['Kategoria'] = df['Liczba'].apply(klasyfikuj)
print(df)

Zastąp wartości

import pandas as pd

df = pd.DataFrame({
    'Ocena': ['A', 'B', 'C', 'A', 'B']
})

# Zamień wartości
mapping = {'A': 5, 'B': 4, 'C': 3}
df['Ocena_numeryczna'] = df['Ocena'].replace(mapping)
print(df)

Podsumowanie

Format CSV:

  • Prosty format tabelaryczny
  • Moduł csv do odczytu/zapisu
  • csv.reader()csv.DictReader()
  • csv.writer()csv.DictWriter()

Pandas – podstawy:

  • Series – jednowymiarowa
  • DataFrame – dwuwymiarowa tabela
  • pd.read_csv()pd.read_excel()pd.read_json()

Operacje DataFrame:

  • Podgląd: head()tail()info()describe()
  • Dostęp: df['kolumna']df.iloc[]df.loc[]
  • Filtrowanie: df[df['kolumna'] > wartość]
  • Sortowanie: sort_values()
  • Grupowanie: groupby()

Brakujące dane:

  • isnull()dropna()fillna()

Zapis:

  • to_csv()to_excel()to_json()

Zastosowania:

  • Analiza sprzedaży
  • Czyszczenie danych
  • Raporty i statystyki
  • Przygotowanie danych do wizualizacji

Ćwiczenia – CSV i Pandas

Moduł csv

  1. Stwórz plik CSV z danymi 5 osób (imię, nazwisko, wiek, miasto).
  2. Wczytaj plik CSV i wyświetl wszystkie dane.
  3. Wczytaj CSV jako słowniki (DictReader) i wyświetl.
  4. Dodaj nową osobę do istniejącego pliku CSV.
  5. Policz ile osób jest z konkretnego miasta.
  6. Znajdź najstarszą osobę w pliku CSV.
  7. Wyfiltruj osoby starsze niż 25 lat i zapisz do nowego CSV.
  8. Stwórz CSV z danymi produktów (nazwa, cena, ilość).
  9. Oblicz wartość magazynu (cena × ilość) i zapisz do nowego CSV.
  10. Wczytaj CSV z różnym separatorem (średnik).

Pandas – podstawy

  1. Stwórz DataFrame z danymi 3 osób (słownik).
  2. Stwórz DataFrame z listy list.
  3. Wyświetl pierwsze 3 wiersze DataFrame.
  4. Wyświetl ostatnie 2 wiersze DataFrame.
  5. Wyświetl informacje o DataFrame (info()).
  6. Wyświetl statystyki opisowe (describe()).
  7. Wyświetl nazwy kolumn DataFrame.
  8. Wyświetl wymiary DataFrame (shape).
  9. Wyświetl typy danych kolumn (dtypes).
  10. Stwórz Series z listy liczb.

Wczytywanie danych

  1. Wczytaj plik CSV do DataFrame.
  2. Wczytaj CSV bez nagłówków i dodaj własne.
  3. Wczytaj tylko pierwsze 10 wierszy z CSV.
  4. Wczytaj CSV z separatorem średnikowym.
  5. Wczytaj plik Excel do DataFrame.

Dostęp do danych

  1. Wyświetl pojedynczą kolumnę DataFrame.
  2. Wyświetl dwie wybrane kolumny DataFrame.
  3. Wyświetl pierwszy wiersz DataFrame (iloc).
  4. Wyświetl wiersze od 2 do 5 (iloc).
  5. Wyświetl konkretną komórkę DataFrame.

Filtrowanie

  1. Wyfiltruj osoby starsze niż 25 lat.
  2. Wyfiltruj osoby z konkretnego miasta.
  3. Wyfiltruj osoby młodsze niż 30 AND z Warszawy.
  4. Wyfiltruj osoby starsze niż 25 OR z Krakowa.
  5. Wyfiltruj osoby z listy miast (isin).
  6. Wyfiltruj wiersze gdzie pensja > 5000.
  7. Znajdź osoby których imię zaczyna się na 'A’.
  8. Wyfiltruj produkty droższe niż 100 zł.
  9. Znajdź zamówienia z ostatniego miesiąca.
  10. Wyfiltruj niepuste wartości w kolumnie.

Dodawanie i usuwanie

  1. Dodaj nową kolumnę do DataFrame.
  2. Oblicz nową kolumnę na podstawie istniejącej (np. wiek + 10).
  3. Usuń kolumnę z DataFrame.
  4. Usuń wiersz po indeksie.
  5. Zmień nazwę kolumny (rename).

Sortowanie

  1. Posortuj DataFrame po wieku (rosnąco).
  2. Posortuj DataFrame po imieniu (alfabetycznie).
  3. Posortuj DataFrame po wieku (malejąco).
  4. Posortuj po dwóch kolumnach (wiek, pensja).
  5. Posortuj indeks DataFrame.

Grupowanie i agregacja

  1. Zgrupuj po mieście i oblicz średni wiek.
  2. Zgrupuj po kategorii produktu i oblicz sumę sprzedaży.
  3. Policz ile osób jest w każdym mieście (size).
  4. Zgrupuj i oblicz min, max, mean dla pensji.
  5. Stwórz tabelę przestawną (pivot_table).

Brakujące dane

  1. Stwórz DataFrame z brakującymi wartościami (np.nan).
  2. Sprawdź które wiersze mają brakujące dane (isnull).
  3. Policz brakujące wartości w każdej kolumnie.
  4. Usuń wiersze z brakującymi wartościami (dropna).
  5. Wypełnij brakujące wartości zerem (fillna).
  6. Wypełnij brakujące wartości średnią kolumny.
  7. Usuń kolumny z więcej niż 50% braków.
  8. Wykryj duplikaty wierszy (duplicated).
  9. Usuń duplikaty (drop_duplicates).
  10. Zastąp wartości None średnią.

Zapisywanie

  1. Zapisz DataFrame do CSV bez indeksu.
  2. Zapisz DataFrame do Excel.
  3. Zapisz DataFrame do JSON.
  4. Zapisz tylko wybrane kolumny do CSV.
  5. Zapisz DataFrame z innym separatorem.

Operacje na tekście

  1. Zamień wszystkie imiona na wielkie litery (str.upper).
  2. Usuń spacje z początku i końca (str.strip).
  3. Sprawdź czy email zawiera '@’ (str.contains).
  4. Podziel kolumnę na dwie (str.split).
  5. Wyciągnij pierwsze 3 znaki z tekstu (str[:3]).

Unikalne wartości

  1. Wyświetl unikalne wartości kolumny 'Miasto’.
  2. Policz liczbę unikalnych miast (nunique).
  3. Zlicz wystąpienia każdej wartości (value_counts).
  4. Znajdź najczęściej występującą wartość.
  5. Usuń duplikaty z kolumny.

Apply i transform

  1. Zastosuj funkcję lambda do kolumny (apply).
  2. Stwórz kategorię na podstawie wieku (apply).
  3. Zastosuj własną funkcję do DataFrame.
  4. Oblicz nową kolumnę używając apply.
  5. Zamień wartości używając replace.

Łączenie danych

  1. Połącz dwa DataFrame wertykalnie (concat).
  2. Połącz dwa DataFrame horyzontalnie (concat axis=1).
  3. Wykonaj merge (inner join) dwóch DataFrame.
  4. Wykonaj left join.
  5. Wykonaj outer join.

Zadania analityczne

  1. Wczytaj dane sprzedażowe i oblicz całkowitą wartość sprzedaży.
  2. Znajdź 5 najlepiej sprzedających się produktów.
  3. Oblicz średnią cenę produktów w każdej kategorii.
  4. Stwórz raport miesięczny sprzedaży.
  5. Znajdź klientów którzy wydali najwięcej.
  6. Oblicz procent sprzedaży dla każdego produktu.
  7. Wyfiltruj zamówienia z ostatnich 30 dni.
  8. Znajdź produkty których nie ma na stanie.
  9. Oblicz średnią ocen dla każdego produktu.
  10. Stwórz ranking najlepszych sprzedawców.

Zadania kompleksowe

  1. Wczytaj dane uczniów i ocen, oblicz średnie, znajdź najlepszego.
  2. Analiza danych o pracownikach: średnia pensja, najstarszy, podział po działach.
  3. Dane sprzedażowe: najlepszy miesiąc, najbardziej dochodowy produkt, trend.
  4. Czyszczenie danych: usuń duplikaty, wypełnij braki, normalizuj tekst.
  5. Analiza ankiety: zlicz odpowiedzi, procenty, wykres rozkładu.
  6. Połącz dane z dwóch źródeł (merge) i stwórz raport.
  7. Analiza logów: zlicz błędy, najczęstsze typy, wykres czasowy.
  8. Dane finansowe: oblicz przychody, koszty, zysk netto.
  9. Segmentacja klientów: podziel na grupy wiekowe, oblicz statystyki.
  10. Time series: analiza sprzedaży w czasie, trendy, sezonowość.