Pandas to najważniejsza biblioteka do analizy danych! Daje struktury DataFrame i Series idealne do pracy z danymi tabelarycznymi.
1pip install pandas1import 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]) # Filtrowanie1# 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')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 kolumn1# 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)]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'})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())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})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()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) # Kolumny1# 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')