import pandas as pdimport numpy as nps = pd.Series([3, -5, 7, 4], index=['a', 'b', 'c', 'd'])print(s)print(s['b'])s['b'] =8print(s)print(s[s >5])print(s *2)print(np.sin(s))
a 3
b -5
c 7
d 4
dtype: int64
-5
a 3
b 8
c 7
d 4
dtype: int64
b 8
c 7
dtype: int64
a 6
b 16
c 14
d 8
dtype: int64
a 0.141120
b 0.989358
c 0.656987
d -0.756802
dtype: float64
Country Capital Population
0 Belgium Brussels 11190846
1 India New Delhi 1303171035
2 Brazil Brasília 207847528
Country Population Capital
0 Belgium 11190846 Brussels
1 India 1303171035 New Delhi
2 Brazil 207847528 Brasília
Country
0 Belgium
--
Country
0 Belgium
--
Country Brazil
Population 207847528
Capital Brasília
Name: 2, dtype: object
--
0 Brussels
1 New Delhi
2 Brasília
Name: Capital, dtype: object
--
New Delhi
loc:
To metoda indeksowania oparta na etykietach, co oznacza, że używa nazw etykiet kolumn i indeksów wierszy do wyboru danych.
Działa na podstawie etykiet indeksu oraz etykiet kolumny, co pozwala na wygodniejsze filtrowanie danych.
Obsługuje zarówno jednostkowe etykiety, jak i zakresy etykiet.
Działa również z etykietami nieliczbowymi.
Przykład użycia: df.loc[1:3, ['A', 'B']] - zwraca wiersze od indeksu 1 do 3 (włącznie) oraz kolumny ‘A’ i ‘B’.
iloc:
To metoda indeksowania oparta na pozycji, co oznacza, że używa liczbowych indeksów kolumn i wierszy do wyboru danych.
Działa na podstawie liczbowych indeksów zarówno dla wierszy, jak i kolumn.
Obsługuje jednostkowe indeksy oraz zakresy indeksów.
W przypadku używania zakresów indeksów, zakres jest półotwarty, co oznacza, że prawy kraniec nie jest uwzględniany.
Przykład użycia: df.iloc[1:3, 0:2] - zwraca wiersze od indeksu 1 do 3 (bez 3) oraz kolumny od indeksu 0 do 2 (bez 2).
0 11190846
1 1303171035
2 207847528
Name: Population, dtype: int64
--
Country Population Capital
1 India 1303171035 New Delhi
--
Population Capital
0 11190846 Brussels
1 1303171035 New Delhi
2 207847528 Brasília
--
** Ważne: trzeba zainstalować bibliotekę openpyxl do importu .xlsx oraz xlrd do importu .xls (nie trzeba ich importować w kodzie jawnie w większości wypadków)
Wybrane argumenty:
io - ścieżka dostępu
sheet_name=0 - nazwa arkusza
header='infer' - nagłówek - domyślnie nazwy kolumn, ew. header=None oznacza brak nagłówka
index_col=None - ustalenie kolumny na indeksy (nazwy wierszy)
right: ramka danych, którą chcesz dołączyć do oryginalnej ramki danych.
how: określa typ łączenia. Dostępne są cztery typy: ‘inner’, ‘outer’, ‘left’ i ‘right’. ‘inner’ to domyślna wartość, która zwraca tylko te wiersze, które mają pasujące klucze w obu ramkach danych.
on: nazwa lub lista nazw, które mają być używane do łączenia. Musi to być nazwa występująca zarówno w oryginalnej, jak i prawej ramce danych.
left_on i right_on: nazwy kolumn w lewej i prawej ramce danych, które mają być używane do łączenia. Można to użyć, jeśli nazwy kolumn nie są takie same.
left_index i right_index: czy indeksy z lewej i prawej ramki danych mają być używane do łączenia.
sort: czy wynikowa ramka danych ma być posortowany według łączonych kluczy.
suffixes: sufiksy, które mają być dodane do nazw kolumn, które nachodzą na siebie. Domyślnie to (’_x’, ’_y’).
copy: czy zawsze kopiować dane, nawet jeśli nie są potrzebne.
indicator: dodaj kolumnę do wynikowej ramki danych, która pokazuje źródło każdego wiersza.
validate: sprawdź, czy określone zasady łączenia są spełnione.
key A B
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
3 K3 A3 B3
key C D
0 K0 C0 D0
1 K1 C1 D1
2 K4 C2 D2
3 K5 C3 D3
Inner join
key A B C D _merge
0 K0 A0 B0 C0 D0 both
1 K1 A1 B1 C1 D1 both
Outer join
key A B C D _merge
0 K0 A0 B0 C0 D0 both
1 K1 A1 B1 C1 D1 both
2 K2 A2 B2 NaN NaN left_only
3 K3 A3 B3 NaN NaN left_only
4 K4 NaN NaN C2 D2 right_only
5 K5 NaN NaN C3 D3 right_only
Left join
key A B C D _merge
0 K0 A0 B0 C0 D0 both
1 K1 A1 B1 C1 D1 both
2 K2 A2 B2 NaN NaN left_only
3 K3 A3 B3 NaN NaN left_only
Right join
key A B C D _merge
0 K0 A0 B0 C0 D0 both
1 K1 A1 B1 C1 D1 both
2 K4 NaN NaN C2 D2 right_only
3 K5 NaN NaN C3 D3 right_only
other: ramka danych, którą chcesz dołączyć do oryginalnej ramki danych.
on: nazwa lub lista nazw kolumn w oryginalnej ramxce danych, do których chcesz dołączyć.
how: określa typ łączenia. Dostępne są cztery typy: ‘inner’, ‘outer’, ‘left’ i ‘right’. ‘left’ to domyślna wartość, która zwraca wszystkie wiersze z oryginalnej ramki danych i pasujące wiersze z drugiej ramki danych. Wartości są uzupełniane wartością NaN, jeśli nie ma dopasowania.
lsuffix i rsuffix: sufiksy do dodania do kolumn, które się powtarzają. Domyślnie jest to puste.
objs: sekwencja ramek danych, które chcesz połączyć.
axis: oś, wzdłuż której chcesz łączyć ramki danych. Domyślnie to 0 (łączenie wierszy, pionowo), ale można także ustawić na 1 (łączenie kolumn, poziomo).
join: określa typ łączenia. Dostępne są dwa typy: ‘outer’ i ‘inner’. ‘outer’ to domyślna wartość, która zwraca wszystkie kolumny z każdej ramki danych. ‘inner’ zwraca tylko te kolumny, które są wspólne dla wszystkich ramek danych.
ignore_index: jeśli ustawione na True, nie używa indeksów z ramek danych do tworzenia indeksu w wynikowej ramce danych. Zamiast tego tworzy nowy indeks od 0 do n-1.
keys: wartości do skojarzenia z obiektami.
levels: określone indeksy dla nowej ramki danych.
names: nazwy dla poziomów indeksów (jeśli są wielopoziomowe).
verify_integrity: sprawdza, czy nowy, skonkatenowana ramka danych nie ma powtarzających się indeksów.
sort: czy sortować niekonkatenacyjną oś (np. indeksy, jeśli axis=0), niezależnie od danych.
copy: czy zawsze kopiować dane, nawet jeśli nie są potrzebne.
A B
0 A0 B0
1 A1 B1
2 A2 B2
C D
0 C0 D0
1 C1 D1
2 C2 D2
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
A B C D
df1 0 A0 B0 NaN NaN
1 A1 B1 NaN NaN
2 A2 B2 NaN NaN
df2 0 NaN NaN C0 D0
1 NaN NaN C1 D1
2 NaN NaN C2 D2
Metoda wide_to_long jest używana do przekształcenia danych z szerokiego formatu (gdzie każda kolumna zawiera wiele zmiennych) do długiego formatu (gdzie każda kolumna zawiera jedną zmienną z wieloma pomiarami). Jest to przydatne, gdy mamy dane, które są rozłożone w wielu kolumnach z powtarzającymi się lub sekwencyjnymi nazwami, i chcemy przekształcić te dane w sposób, który ułatwia analizę i wizualizację.
Wyjaśnienie parametrów wide_to_long
stubnames: Lista początkowych części nazw kolumn, które mają zostać przekształcone.
i: Nazwa kolumny lub lista kolumn, które identyfikują poszczególne wiersze. W naszym przykładzie jest to id, które unikalnie identyfikuje osobę.
j: Nazwa nowej kolumny, w której będą przechowywane różne poziomy zmiennych (w naszym przypadku rok).
A B C D
0 foo one 2.0 3.0
1 bar one 1.0 2.0
2 baz two 3.0 1.0
A B My_Var My_Val
0 foo one C 2.0
1 bar one C 1.0
2 baz two C 3.0
3 foo one D 3.0
4 bar one D 2.0
5 baz two D 1.0
5.7 “Tidy data”
Imię
Wiek
Wzrost
Kolor oczu
Adam
26
167
Brązowe
Sylwia
34
164
Piwne
Tomasz
42
183
Niebieskie
jedna obserwacja (jednostka statystyczna) = jeden wiersz w tabeli/macierzy/ramce danych
wartosci danej cechy znajduja sie w kolumnach
jeden typ/rodzaj obserwacji w jednej tabeli/macierzy/ramce danych
5.8 Obsługa brakujących danych
import numpy as npimport pandas as pdstring_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])print(string_data)print(string_data.isnull())print(string_data.dropna())
from numpy import nan as NAimport pandas as pddata = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]])cleaned = data.dropna()print(cleaned)print(data.dropna(how='all'))data[4] = NAprint(data.dropna(how='all', axis=1))print(data)print(data.fillna(0))print(data.fillna({1: 0.5, 2: 0}))
0 1 2
0 1.0 6.5 3.0
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
3 NaN 6.5 3.0
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3.0
0 1 2 4
0 1.0 6.5 3.0 NaN
1 1.0 NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN 6.5 3.0 NaN
0 1 2 4
0 1.0 6.5 3.0 0.0
1 1.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 6.5 3.0 0.0
0 1 2 4
0 1.0 6.5 3.0 NaN
1 1.0 0.5 0.0 NaN
2 NaN 0.5 0.0 NaN
3 NaN 6.5 3.0 NaN
k1 k2
0 one 1
1 two 1
2 one 2
3 two 3
4 one 3
5 two 4
6 two 4
0 False
1 False
2 False
3 False
4 False
5 False
6 True
dtype: bool
k1 k2
0 one 1
1 two 1
2 one 2
3 two 3
4 one 3
5 two 4
import pandas as pddata = {'A': ['1', '2', '3', '4', '5', '6'],'B': ['7.5', '8.5', '9.5', '10.5', '11.5', '12.5'],'C': ['x', 'y', 'z', 'x', 'y', 'z']}df = pd.DataFrame(data)# Wyświetlenie oryginalnej ramki danychprint("Oryginalna ramka danych:")print(df)# Zmiana typu danych kolumny 'A' na intdf['A'] = pd.Series(df['A'], dtype=int)# Zmiana typu danych kolumny 'B' na floatdf['B'] = pd.Series(df['A'], dtype=float)# Wyświetlenie ramki danych po zmianie typówprint("\nRamka danych po zmianie typów:")print(df)
Oryginalna ramka danych:
A B C
0 1 7.5 x
1 2 8.5 y
2 3 9.5 z
3 4 10.5 x
4 5 11.5 y
5 6 12.5 z
Ramka danych po zmianie typów:
A B C
0 1 1.0 x
1 2 2.0 y
2 3 3.0 z
3 4 4.0 x
4 5 5.0 y
5 6 6.0 z
import pandas as pddata = {'A': ['1', '2', '3', '4', '5', '6'],'B': ['7.5', '8.5', '9.5', '10.5', '11.5', '12.5'],'C': ['x', 'y', 'z', 'x', 'y', 'z']}df = pd.DataFrame(data)# Wyświetlenie oryginalnej ramki danychprint("Oryginalna ramka danych:")print(df)# Zmiana typu danych kolumny 'A' na intdf['A'] = df['A'].astype(int)# Zmiana typu danych kolumny 'B' na floatdf['B'] = df['B'].astype(float)# Wyświetlenie ramki danych po zmianie typówprint("\nRamka danych po zmianie typów:")print(df)
Oryginalna ramka danych:
A B C
0 1 7.5 x
1 2 8.5 y
2 3 9.5 z
3 4 10.5 x
4 5 11.5 y
5 6 12.5 z
Ramka danych po zmianie typów:
A B C
0 1 7.5 x
1 2 8.5 y
2 3 9.5 z
3 4 10.5 x
4 5 11.5 y
5 6 12.5 z
5.14 Zmiana znaku kategoriach
import pandas as pd# Tworzenie ramki danychdata = {'A': ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr'],'B': ['1.23', '4.56', '7.89', '0.12', '3.45', '6.78'],'C': ['xyz', 'uvw', 'rst', 'opq', 'lmn', 'ijk']}df = pd.DataFrame(data)# Wyświetlenie oryginalnej ramki danychprint("Oryginalna ramka danych:")print(df)# Zmiana małych liter na duże w kolumnie 'A'df['A'] = df['A'].str.upper()# Zastąpienie kropki przecinkiem w kolumnie 'B'df['B'] = df['B'].str.replace('.', ',')# Wyświetlenie ramki danych po modyfikacjiprint("\nRamka danych po modyfikacji:")print(df)
Oryginalna ramka danych:
A B C
0 abc 1.23 xyz
1 def 4.56 uvw
2 ghi 7.89 rst
3 jkl 0.12 opq
4 mno 3.45 lmn
5 pqr 6.78 ijk
Ramka danych po modyfikacji:
A B C
0 ABC 1,23 xyz
1 DEF 4,56 uvw
2 GHI 7,89 rst
3 JKL 0,12 opq
4 MNO 3,45 lmn
5 PQR 6,78 ijk