Usamos cookies para mejorar tu experiencia en el sitio
CodeWorlds

Pandas - manipulacja danymi

Pandas to najważniejsza biblioteka do analizy danych! Daje struktury DataFrame i Series idealne do pracy z danymi tabelarycznymi.

Instalacja

1pip install pandas

Series - jednowymiarowa struktura

1import pandas as pd
2
3# Z listy
4populations = pd.Series([120, 450, 85, 200], name='population')
5
6# Z indeksem
7species = pd.Series(
8    [120, 450, 85, 200],
9    index=['Lion', 'Elephant', 'Cheetah', 'Giraffe'],
10    name='population'
11)
12
13print(species['Lion'])      # 120
14print(species[species > 100])  # Filtrowanie

DataFrame - tabela danych

1# Tworzenie DataFrame
2safari_data = pd.DataFrame({
3    'species': ['Lion', 'Elephant', 'Cheetah', 'Giraffe'],
4    'population': [120, 450, 85, 200],
5    'habitat': ['Savanna', 'Forest', 'Savanna', 'Savanna'],
6    'endangered': [True, False, True, False]
7})
8
9# Z pliku CSV
10df = pd.read_csv('safari_species.csv')
11
12# Z pliku Excel
13df = pd.read_excel('safari_data.xlsx')
14
15# Z JSON
16df = pd.read_json('species.json')

Eksploracja danych

1# Podstawowe informacje
2print(df.head())       # Pierwsze 5 wierszy
3print(df.tail())       # Ostatnie 5 wierszy
4print(df.info())       # Typy danych, nulle
5print(df.describe())   # Statystyki opisowe
6print(df.shape)        # (wiersze, kolumny)
7print(df.columns)      # Nazwy kolumn
8print(df.dtypes)       # Typy danych kolumn

Selekcja danych

1# Pojedyncza kolumna (Series)
2populations = df['population']
3
4# Wiele kolumn
5subset = df[['species', 'population']]
6
7# Wiersze po indeksie
8df.iloc[0]       # Pierwszy wiersz
9df.iloc[0:3]     # Wiersze 0-2
10df.iloc[0, 1]    # Wiersz 0, kolumna 1
11
12# Wiersze po etykiecie
13df.loc[0]              # Wiersz z indeksem 0
14df.loc[0:2, 'species'] # Wiersze 0-2, kolumna 'species'
15
16# Filtrowanie warunkowe
17endangered = df[df['endangered'] == True]
18large_pop = df[df['population'] > 100]
19savanna = df[df['habitat'] == 'Savanna']
20
21# Łączone warunki
22df[(df['population'] > 100) & (df['endangered'] == False)]

Modyfikacja danych

1# Nowa kolumna
2df['population_thousands'] = df['population'] / 1000
3
4# Modyfikacja istniejącej
5df['population'] = df['population'] * 1.1  # Wzrost 10%
6
7# Apply - zastosuj funkcję
8df['status'] = df['population'].apply(
9    lambda x: 'endangered' if x < 100 else 'stable'
10)
11
12# Usuwanie
13df_clean = df.drop('temp_column', axis=1)  # Usuń kolumnę
14df_clean = df.drop(0, axis=0)               # Usuń wiersz
15
16# Zmiana nazw kolumn
17df = df.rename(columns={'old_name': 'new_name'})

Obsługa braków danych

1# Sprawdź nulle
2print(df.isnull().sum())
3
4# Usuń wiersze z nullami
5df_clean = df.dropna()
6
7# Wypełnij nulle
8df['population'] = df['population'].fillna(0)
9df['population'] = df['population'].fillna(df['population'].mean())

Grupowanie i agregacja

1# Grupuj po siedlisku
2by_habitat = df.groupby('habitat')
3
4# Agregacje
5print(by_habitat['population'].mean())   # Średnia populacja
6print(by_habitat['population'].sum())    # Suma
7print(by_habitat.size())                 # Liczba gatunków
8
9# Wiele agregacji
10stats = df.groupby('habitat').agg({
11    'population': ['mean', 'sum', 'count'],
12    'endangered': 'sum'
13})

Sortowanie

1# Sortuj po wartościach
2df_sorted = df.sort_values('population', ascending=False)
3
4# Sortuj po wielu kolumnach
5df_sorted = df.sort_values(['habitat', 'population'])
6
7# Sortuj po indeksie
8df_sorted = df.sort_index()

Łączenie DataFrame

1# Merge (jak SQL JOIN)
2df_merged = pd.merge(
3    df_species,
4    df_habitats,
5    on='habitat_id',
6    how='left'  # 'inner', 'outer', 'right'
7)
8
9# Concat - łączenie wierszy/kolumn
10df_combined = pd.concat([df1, df2], axis=0)  # Wiersze
11df_combined = pd.concat([df1, df2], axis=1)  # Kolumny

Zapis danych

1# Do CSV
2df.to_csv('output.csv', index=False)
3
4# Do Excel
5df.to_excel('output.xlsx', index=False)
6
7# Do JSON
8df.to_json('output.json', orient='records')
Ir a CodeWorlds