04-Obiekty-DataFrame(1).pdf

(129 KB) Pobierz
(https://daneucza.pl)
Obiekty DataFrame
O obiekcie
DataFrame
możemy myśleć jak o kolekcji obiektów
Series
dzielących ten sam indeks.
In [1]:
import
pandas
as
pd
In [2]:
# import biblioteki NumPy i funkcji random do wygenerowania macierzy (5x4) liczb pseudolosowych
import
numpy
as
np
from
numpy.random
import
randn
# aby wyniki były powtarzalne ustawiamy tzw. ziarno
np.random.seed(123)
In [3]:
df
=
pd.DataFrame(randn(5,4),index='A
B C D E'.split(),columns='W X Y Z'.split())
In [4]:
df
Out[4]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
E
X
0.997345
1.651437
Y
0.282978
Z
-1.506295
-2.426679 -0.428913
-0.866740 -0.678886 -0.094709
-0.638902 -0.443982 -0.434351
2.186786
1.004054
0.386186
2.205930
Selekcja
Nauczmy się sposóbów przechwytywania danych z obiektu
DataFrame
:
In [5]:
# pobranie kolumny W
df['W']
Out[5]:
A
B
C
D
E
-1.085631
-0.578600
1.265936
1.491390
2.205930
Name: W, dtype: float64
In [6]:
# pobranie kilku kolumn: W i Z
df[['W','Z']]
Out[6]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
E
Z
-1.506295
-0.428913
-0.094709
-0.434351
0.386186
2.205930
In [7]:
# skladnia SQL, pobranie tylko jednej kolumny
df.W
Out[7]:
A
B
C
D
E
-1.085631
-0.578600
1.265936
1.491390
2.205930
Name: W, dtype: float64
Pojedyńcza kolumna obiektu
DataFrame
to obiekt
Series
.
In [8]:
type(df['W'])
Out[8]:
pandas.core.series.Series
Tworzenie nowej kolumny:
In [9]:
df['new']
=
df['W']
+
df['Y']
In [10]:
dfnazwie skladniki
Out[10]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
E
X
0.997345
1.651437
Y
0.282978
Z
new
-1.506295 -0.802652
-2.426679 -0.428913 -3.005279
-0.866740 -0.678886 -0.094709 0.587050
-0.638902 -0.443982 -0.434351 1.047408
2.186786
1.004054
0.386186
3.209984
2.205930
Usuwanie kolumn
In [11]:
df.drop('new',axis=1)
Out[11]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
E
X
0.997345
1.651437
Y
0.282978
Z
-1.506295
-2.426679 -0.428913
-0.866740 -0.678886 -0.094709
-0.638902 -0.443982 -0.434351
2.186786
1.004054
0.386186
2.205930
In [12]:
# funkcja drop nie usuwa orginalnej kolumny chyba, że sami to określimy
df
Out[12]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
E
X
0.997345
1.651437
Y
0.282978
Z
new
-1.506295 -0.802652
-2.426679 -0.428913 -3.005279
-0.866740 -0.678886 -0.094709 0.587050
-0.638902 -0.443982 -0.434351 1.047408
2.186786
1.004054
0.386186
3.209984
2.205930
In [13]:
# wskazanie inplace=True o usunięciu definitywnym kolumny 'new'
df.drop('new',axis=1,inplace=True)
In [14]:
df
Out[14]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
E
X
0.997345
1.651437
Y
0.282978
Z
-1.506295
-2.426679 -0.428913
-0.866740 -0.678886 -0.094709
-0.638902 -0.443982 -0.434351
2.186786
1.004054
0.386186
2.205930
Możemy uswać wiersze w ten sam sposób:
In [15]:
df.drop('E',axis=0)
Out[15]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
X
0.997345
1.651437
Y
0.282978
Z
-1.506295
-2.426679 -0.428913
-0.866740 -0.678886 -0.094709
-0.638902 -0.443982 -0.434351
Selekcja wierszy
In [16]:
# na bazie etykiety
df.loc['A']
Out[16]:
W
X
Y
Z
-1.085631
0.997345
0.282978
-1.506295
Name: A, dtype: float64
Lub bazując na identyfikatorze numerycznym zamiast na etykiecie
In [17]:
df.iloc[2]
Out[17]:
W
X
Y
Z
1.265936
-0.866740
-0.678886
-0.094709
Name: C, dtype: float64
Selekcja podzbioru na bazie etykiet wierszy i kolumn
In [18]:
df.loc['B','Y']
Out[18]:
-2.426679243393074
In [19]:
df.loc[['A','B'],['W','Y']]
Out[19]:
W
A
-1.085631
B
-0.578600
Y
0.282978
-2.426679
Warunkowa selekcja
Bardzo ważną funkcją w
pandas
jest selekcja warunkowa.
In [20]:
df
Out[20]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
E
X
0.997345
1.651437
Y
0.282978
Z
-1.506295
-2.426679 -0.428913
-0.866740 -0.678886 -0.094709
-0.638902 -0.443982 -0.434351
2.186786
1.004054
0.386186
2.205930
In [21]:
df>0
Out[21]:
W
X
Y
True
Z
False
A
False True
B
False True
C
True
D
True
E
False False
False False False
False False False
True
True
True
True
In [22]:
df[df>0]
Out[22]:
W
A
NaN
B
NaN
C
1.265936
D
1.491390
E
X
Y
Z
0.997345 0.282978 NaN
1.651437 NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2.205930 2.186786 1.004054 0.386186
In [23]:
df[df['W']>0]
Out[23]:
W
C
1.265936
D
1.491390
E
X
Y
Z
-0.866740 -0.678886 -0.094709
-0.638902 -0.443982 -0.434351
1.004054
0.386186
2.205930 2.186786
In [24]:
df[df['W']>0]['Y']
Out[24]:
C
D
E
-0.678886
-0.443982
1.004054
Name: Y, dtype: float64
In [25]:
df[df['W']>0][['Y','X']]
Out[25]:
Y
C
-0.678886
D
-0.443982
E
X
-0.866740
-0.638902
2.186786
1.004054
Dla większej liczby warunków można użyć nawiasów i operatorów logicznych:
|
(lub/oraz)
&
(i)
In [26]:
df[(df['W']>0)
&
(df['Y']
> 1)]
Out[26]:
W
E
X
Y
Z
2.20593 2.186786 1.004054 0.386186
Indeks
Kilka funkcji indeksu z resetowaniem i ustawianiem indeksu włącznie.
In [27]:
df
Out[27]:
W
A
-1.085631
B
-0.578600
C
1.265936
D
1.491390
E
X
0.997345
1.651437
Y
0.282978
Z
-1.506295
-2.426679 -0.428913
-0.866740 -0.678886 -0.094709
-0.638902 -0.443982 -0.434351
2.186786
1.004054
0.386186
2.205930
Zgłoś jeśli naruszono regulamin