Neste exemplo, usaremos um arquivo com muitos dados ausentes (representados por NaNs) para explorar o conceito de filtros. Além disso, vamos fazer um gráfico simples para representar os dados. Para isso, vamos usar duas bibliotecas importantes: Pandas (que já mencionamos) e matplotlib.
In [1]:
import pandas as pd
Primeiramente, vamos ler o arquivo usando tabs como separadores.
In [2]:
dados = pd.read_csv('data_from_odv_data_carbon-sse_after_correction_spikes_v3_O2_corr.txt', sep = '\t', lineterminator='\n')
/usr/lib/python3.5/site-packages/IPython/core/interactiveshell.py:2717: DtypeWarning: Columns (1) have mixed types. Specify dtype option on import or set low_memory=False.
interactivity=interactivity, compiler=compiler, result=result)
In [3]:
dados
Out[3]:
Cruise
Station
Type
mon/day/yr
hh:mm
Longitude [degrees_east]
Latitude [degrees_north]
Bot. Depth [m]
Cast
QF
...
QF.19
Oxygen [ml l]
QF.20
Num Scan per bin
QF.21
flag
QF.22
Section Longitude:DOUBLE
QF.23
QV:ODV:SAMPLE
0
NHoCruzeiro
5
C
12/6/2010
23:22
308.4600
-34.384
1052.0
1
1
...
1
5.07
1
33
1
NaN
1
NaN
1
1
1
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.09
1
42
1
NaN
1
NaN
1
1
2
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.18
1
46
1
NaN
1
NaN
1
1
3
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.23
1
36
1
NaN
1
NaN
1
1
4
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.18
1
26
1
NaN
1
NaN
1
1
5
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.27
1
28
1
NaN
1
NaN
1
1
6
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.23
1
55
1
NaN
1
NaN
1
1
7
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.18
1
27
1
NaN
1
NaN
1
1
8
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.14
1
53
1
NaN
1
NaN
1
1
9
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.09
1
44
1
NaN
1
NaN
1
1
10
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.17
1
48
1
NaN
1
NaN
1
1
11
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.20
1
53
1
NaN
1
NaN
1
1
12
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.15
1
47
1
NaN
1
NaN
1
1
13
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.16
1
43
1
NaN
1
NaN
1
1
14
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.14
1
53
1
NaN
1
NaN
1
1
15
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.10
1
59
1
NaN
1
NaN
1
1
16
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.08
1
59
1
NaN
1
NaN
1
1
17
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.02
1
42
1
NaN
1
NaN
1
1
18
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.09
1
60
1
NaN
1
NaN
1
1
19
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.12
1
41
1
NaN
1
NaN
1
1
20
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.07
1
34
1
NaN
1
NaN
1
1
21
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.03
1
49
1
NaN
1
NaN
1
1
22
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.09
1
44
1
NaN
1
NaN
1
1
23
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.04
1
22
1
NaN
1
NaN
1
1
24
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.04
1
21
1
NaN
1
NaN
1
1
25
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.06
1
24
1
NaN
1
NaN
1
1
26
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.08
1
24
1
NaN
1
NaN
1
1
27
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.02
1
33
1
NaN
1
NaN
1
1
28
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.02
1
46
1
NaN
1
NaN
1
1
29
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.89
1
22
1
NaN
1
NaN
1
1
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
57652
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.53
1
46
1
NaN
1
NaN
1
1
57653
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.53
1
45
1
NaN
1
NaN
1
1
57654
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.51
1
28
1
NaN
1
NaN
1
1
57655
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.50
1
28
1
NaN
1
NaN
1
1
57656
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.50
1
57
1
NaN
1
NaN
1
1
57657
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.47
1
33
1
NaN
1
NaN
1
1
57658
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.38
1
31
1
NaN
1
NaN
1
1
57659
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.53
1
29
1
NaN
1
NaN
1
1
57660
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.60
1
60
1
NaN
1
NaN
1
1
57661
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.69
1
40
1
NaN
1
NaN
1
1
57662
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.72
1
35
1
NaN
1
NaN
1
1
57663
NHoCruzeiro
080e
B
1/7/2011
0:06
319.0342
-22.119
24.0
1
1
...
1
4.70
1
35
1
NaN
1
NaN
1
1
57664
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.63
1
24
1
NaN
1
NaN
1
1
57665
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.53
1
18
1
NaN
1
NaN
1
1
57666
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.26
1
19
1
NaN
1
NaN
1
1
57667
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.19
1
26
1
NaN
1
NaN
1
1
57668
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.37
1
34
1
NaN
1
NaN
1
1
57669
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.48
1
28
1
NaN
1
NaN
1
1
57670
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.56
1
51
1
NaN
1
NaN
1
1
57671
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.52
1
74
1
NaN
1
NaN
1
1
57672
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.41
1
54
1
NaN
1
NaN
1
1
57673
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.42
1
38
1
NaN
1
NaN
1
1
57674
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.41
1
46
1
NaN
1
NaN
1
1
57675
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.40
1
38
1
NaN
1
NaN
1
1
57676
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.41
1
81
1
NaN
1
NaN
1
1
57677
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.42
1
16
1
NaN
1
NaN
1
1
57678
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.48
1
22
1
NaN
1
NaN
1
1
57679
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.52
1
21
1
NaN
1
NaN
1
1
57680
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.55
1
25
1
NaN
1
NaN
1
1
57681
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.58
1
40
1
NaN
1
NaN
1
1
57682 rows × 57 columns
Agora, vamos tentar identificar de quantas estações temos dados disponíveis.
In [4]:
dados.Station
Out[4]:
0 5
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 NaN
13 NaN
14 NaN
15 NaN
16 NaN
17 NaN
18 NaN
19 NaN
20 NaN
21 NaN
22 NaN
23 NaN
24 NaN
25 NaN
26 NaN
27 NaN
28 NaN
29 NaN
...
57652 NaN
57653 NaN
57654 NaN
57655 NaN
57656 NaN
57657 NaN
57658 NaN
57659 NaN
57660 NaN
57661 NaN
57662 NaN
57663 080e
57664 NaN
57665 NaN
57666 NaN
57667 NaN
57668 NaN
57669 NaN
57670 NaN
57671 NaN
57672 NaN
57673 NaN
57674 NaN
57675 NaN
57676 NaN
57677 NaN
57678 NaN
57679 NaN
57680 NaN
57681 NaN
Name: Station, dtype: object
Agora, queremos identificar quantas estações temos; para isso, vamos identificar todas as linhas em que a coluna Station tem valores válidos. Podemos fazer isso de duas maneiras: primeiro, vamos identificar todas as linhas em que a coluna Station contém NaNs:
In [5]:
dados.Station.isnull()
Out[5]:
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
10 True
11 True
12 True
13 True
14 True
15 True
16 True
17 True
18 True
19 True
20 True
21 True
22 True
23 True
24 True
25 True
26 True
27 True
28 True
29 True
...
57652 True
57653 True
57654 True
57655 True
57656 True
57657 True
57658 True
57659 True
57660 True
57661 True
57662 True
57663 False
57664 True
57665 True
57666 True
57667 True
57668 True
57669 True
57670 True
57671 True
57672 True
57673 True
57674 True
57675 True
57676 True
57677 True
57678 True
57679 True
57680 True
57681 True
Name: Station, dtype: bool
Agora, vamos fazer o oposto: verificar quais linhas da coluna Station não tem NaNs:
In [6]:
dados.Station.notnull()
Out[6]:
0 True
1 False
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
11 False
12 False
13 False
14 False
15 False
16 False
17 False
18 False
19 False
20 False
21 False
22 False
23 False
24 False
25 False
26 False
27 False
28 False
29 False
...
57652 False
57653 False
57654 False
57655 False
57656 False
57657 False
57658 False
57659 False
57660 False
57661 False
57662 False
57663 True
57664 False
57665 False
57666 False
57667 False
57668 False
57669 False
57670 False
57671 False
57672 False
57673 False
57674 False
57675 False
57676 False
57677 False
57678 False
57679 False
57680 False
57681 False
Name: Station, dtype: bool
Agora, podemos fazer um filtro: como o resultado da operação acima é uma coluna com valores Verdadeiro (True) ou Falso (False), podemos selecionar entre os dados apenas aquelas linhas para as quais a operação acima resultou em True. Isso é uma forma de slicing, mas como envolve uma operação lógica (algo que retorna verdadeiro ou falso) chamamos isso de filtro:
In [7]:
dados[dados.Station.notnull()]
Out[7]:
Cruise
Station
Type
mon/day/yr
hh:mm
Longitude [degrees_east]
Latitude [degrees_north]
Bot. Depth [m]
Cast
QF
...
QF.19
Oxygen [ml l]
QF.20
Num Scan per bin
QF.21
flag
QF.22
Section Longitude:DOUBLE
QF.23
QV:ODV:SAMPLE
0
NHoCruzeiro
5
C
12/6/2010
23:22
308.4600
-34.384
1052.0
1
1
...
1
5.07
1
33
1
NaN
1
NaN
1
1
1043
NHoCruzeiro
6
C
12/7/2010
2:16
308.6418
-34.521
1780.0
1
1
...
1
5.07
1
33
1
NaN
1
NaN
1
1
2770
NHoCruzeiro
7
C
12/7/2010
7:31
308.9007
-34.708
2252.0
1
1
...
1
4.97
1
21
1
NaN
1
NaN
1
1
4935
NHoCruzeiro
8
C
12/7/2010
10:49
309.1553
-34.862
2747.0
1
1
...
1
5.04
1
28
1
NaN
1
NaN
1
1
7634
NHoCruzeiro
9
C
12/7/2010
23:04
310.1878
-33.660
2404.0
1
1
...
1
3.97
1
34
1
NaN
1
NaN
1
1
9902
NHoCruzeiro
10
C
12/8/2010
4:35
309.7402
-33.352
820.0
1
1
...
1
4.77
1
33
1
NaN
1
NaN
1
1
10644
NHoCruzeiro
11
C
12/8/2010
7:57
309.5482
-33.225
434.0
1
1
...
1
4.63
1
36
1
NaN
1
NaN
1
1
11061
NHoCruzeiro
24
C
12/9/2010
23:28
310.2707
-31.837
1526.0
1
1
...
1
4.97
1
35
1
NaN
1
NaN
1
1
12560
NHoCruzeiro
25
C
12/10/2010
2:52
310.4820
-31.934
2038.0
1
1
...
1
4.75
1
31
1
NaN
1
NaN
1
1
14493
NHoCruzeiro
26
C
12/10/2010
5:58
310.7192
-32.075
2336.0
1
1
...
1
4.88
1
20
1
NaN
1
NaN
1
1
16768
NHoCruzeiro
27
C
12/10/2010
20:02
311.9665
-30.861
2574.0
1
1
...
1
4.77
1
37
1
NaN
1
NaN
1
1
19266
NHoCruzeiro
28
C
12/11/2010
0:16
311.7163
-30.714
1452.0
1
1
...
1
4.79
1
26
1
NaN
1
NaN
1
1
20703
NHoCruzeiro
29
C
12/11/2010
4:16
311.4837
-30.592
721.0
1
1
...
1
4.60
1
27
1
NaN
1
NaN
1
1
21344
NHoCruzeiro
38
C
12/12/2010
15:21
312.2043
-29.252
590.0
1
1
...
1
4.77
1
32
1
NaN
1
NaN
1
1
21910
NHoCruzeiro
39
C
12/12/2010
18:26
312.5760
-29.414
1375.0
1
1
...
1
4.55
1
24
1
NaN
1
NaN
1
1
23224
NHoCruzeiro
40
C
12/12/2010
21:52
312.8970
-29.549
1999.0
1
1
...
1
4.81
1
36
1
NaN
1
NaN
1
1
25121
NHoCruzeiro
41
C
12/13/2010
12:27
313.4408
-28.234
1703.0
1
1
...
1
4.63
1
26
1
NaN
1
NaN
1
1
26748
NHoCruzeiro
49
C
12/18/2010
8:06
313.0522
-28.131
491.0
1
1
...
1
3.44
1
18
1
NaN
1
NaN
1
1
27211
NHoCruzeiro
50
C
12/18/2010
12:01
313.4473
-28.246
1734.0
1
1
...
1
4.56
1
37
1
NaN
1
NaN
1
1
28907
NHoCruzeiro
51
C
12/18/2010
19:51
313.7685
-27.347
1800.0
1
1
...
1
4.55
1
27
1
NaN
1
NaN
1
1
30617
NHoCruzeiro
52
C
12/18/2010
22:59
313.4742
-27.268
1188.0
1
1
...
1
4.68
1
17
1
NaN
1
NaN
1
1
31782
NHoCruzeiro
53
C
12/19/2010
0:59
313.3147
-27.214
743.0
1
1
...
1
4.76
1
27
1
NaN
1
NaN
1
1
32489
NHoCruzeiro
62
C
12/20/2010
10:57
313.8275
-26.553
525.0
1
1
...
1
4.75
1
28
1
NaN
1
NaN
1
1
32996
NHoCruzeiro
63
C
12/20/2010
14:55
314.1617
-26.585
975.0
1
1
...
1
4.66
1
45
1
NaN
1
NaN
1
1
33922
NHoCruzeiro
73
C
1/5/2011
20:01
319.8377
-21.477
685.0
1
1
...
1
4.65
1
14
1
NaN
1
NaN
1
1
34435
NHoCruzeiro
74
C
1/5/2011
23:35
319.9645
-21.453
1230.0
1
1
...
1
4.49
1
16
1
NaN
1
NaN
1
1
35616
NHoCruzeiro
75
C
1/6/2011
3:09
320.1532
-21.832
1196.0
1
1
...
1
4.38
1
57
1
NaN
1
NaN
1
1
36772
NHoCruzeiro
76
C
1/6/2011
5:16
320.0130
-21.889
518.0
1
1
...
1
4.36
1
41
1
NaN
1
NaN
1
1
37229
NHoCruzeiro
83
C
1/7/2011
9:21
319.6620
-22.518
552.0
1
1
...
1
4.39
1
24
1
NaN
1
NaN
1
1
37766
NHoCruzeiro
84
C
1/7/2011
13:53
320.0577
-22.304
1055.0
1
1
...
1
4.73
1
33
1
NaN
1
NaN
1
1
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
55788
NHoCruzeiro
72
B
1/5/2011
17:41
319.6820
-21.517
52.0
1
1
...
1
4.64
1
21
1
NaN
1
NaN
1
1
55828
NHoCruzeiro
77
B
1/6/2011
7:58
319.7958
-21.917
66.0
1
1
...
1
4.56
1
26
1
NaN
1
NaN
1
1
55886
NHoCruzeiro
78
B
1/6/2011
10:53
319.4352
-21.965
29.0
1
1
...
1
3.18
1
41
1
NaN
1
NaN
1
1
55909
NHoCruzeiro
81
B
1/7/2011
2:35
319.2327
-22.211
57.0
1
1
...
1
4.72
1
25
1
NaN
1
NaN
1
1
55959
NHoCruzeiro
82
B
1/7/2011
6:13
319.4162
-22.305
81.0
1
1
...
1
4.58
1
51
1
NaN
1
NaN
1
1
56035
NHoCruzeiro
90
B
1/8/2011
8:20
319.1933
-22.704
100.0
1
1
...
1
4.60
1
22
1
NaN
1
NaN
1
1
56127
NHoCruzeiro
91
B
1/8/2011
10:31
319.0527
-22.575
65.0
1
1
...
1
4.66
1
28
1
NaN
1
NaN
1
1
56186
NHoCruzeiro
92
B
1/8/2011
13:33
318.8382
-22.442
51.0
1
1
...
1
4.69
1
29
1
NaN
1
NaN
1
1
56232
NHoCruzeiro
93
B
1/8/2011
15:35
318.6787
-22.322
31.0
1
1
...
1
4.81
1
39
1
NaN
1
NaN
1
1
56258
NHoCruzeiro
94
B
1/8/2011
19:10
318.2633
-22.597
44.0
1
1
...
1
5.29
1
30
1
NaN
1
NaN
1
1
56296
NHoCruzeiro
95
B
1/8/2011
22:40
318.5617
-22.807
62.0
1
1
...
1
5.30
1
20
1
NaN
1
NaN
1
1
56348
NHoCruzeiro
96
B
1/9/2011
1:50
318.8605
-23.036
95.0
1
1
...
1
4.56
1
34
1
NaN
1
NaN
1
1
56438
NHoCruzeiro
97
B
1/9/2011
3:41
318.9782
-23.132
98.0
1
1
...
1
4.57
1
42
1
NaN
1
NaN
1
1
56523
NHoCruzeiro
100
B
1/9/2011
14:36
318.6798
-23.556
146.0
1
1
...
1
4.54
1
21
1
NaN
1
NaN
1
1
56663
NHoCruzeiro
101
B
1/9/2011
17:49
318.4612
-23.386
120.0
1
1
...
1
4.63
1
24
1
NaN
1
NaN
1
1
56774
NHoCruzeiro
102
B
1/9/2011
20:46
318.2067
-23.250
124.0
1
1
...
1
4.61
1
19
1
NaN
1
NaN
1
1
56893
NHoCruzeiro
103
B
1/10/2011
0:10
317.9988
-23.105
111.0
1
1
...
1
4.56
1
29
1
NaN
1
NaN
1
1
56994
NHoCruzeiro
104
B
1/10/2011
2:21
317.9935
-23.309
128.0
1
1
...
1
4.62
1
21
1
NaN
1
NaN
1
1
57116
NHoCruzeiro
105
B
1/10/2011
4:29
317.9985
-23.526
156.0
1
1
...
1
4.51
1
31
1
NaN
1
NaN
1
1
57265
NHoCruzeiro
110
B
1/10/2011
22:37
317.4990
-23.544
138.0
1
1
...
1
3.61
1
37
1
NaN
1
NaN
1
1
57393
NHoCruzeiro
111
B
1/11/2011
2:23
317.4960
-23.274
110.0
1
1
...
1
4.51
1
23
1
NaN
1
NaN
1
1
57496
NHoCruzeiro
112
B
1/11/2011
5:00
317.5155
-22.996
52.0
1
1
...
1
4.65
1
42
1
NaN
1
NaN
1
1
57544
NHoCruzeiro
70
B
1/5/2011
11:48
319.0652
-21.617
15.0
1
1
...
1
4.62
1
37
1
NaN
1
NaN
1
1
57556
NHoCruzeiro
71
B
1/5/2011
14:43
319.3987
-21.568
24.0
1
1
...
1
4.52
1
90
1
NaN
1
NaN
1
1
57575
NHoCruzeiro
79
B
1/6/2011
13:08
319.2237
-21.983
14.0
1
1
...
1
4.62
1
47
1
NaN
1
NaN
1
1
57587
NHoCruzeiro
080a
B
1/6/2011
15:58
319.0268
-22.124
25.0
1
1
...
1
4.53
1
29
1
NaN
1
NaN
1
1
57606
NHoCruzeiro
080b
B
1/6/2011
18:19
319.0337
-22.118
25.0
1
1
...
1
4.35
1
49
1
NaN
1
NaN
1
1
57625
NHoCruzeiro
080c
B
1/6/2011
20:13
319.0358
-22.120
25.0
1
1
...
1
4.57
1
50
1
NaN
1
NaN
1
1
57644
NHoCruzeiro
080d
B
1/6/2011
22:13
319.0380
-22.117
24.0
1
1
...
1
4.67
1
22
1
NaN
1
NaN
1
1
57663
NHoCruzeiro
080e
B
1/7/2011
0:06
319.0342
-22.119
24.0
1
1
...
1
4.70
1
35
1
NaN
1
NaN
1
1
119 rows × 57 columns
Desta forma, o resultado acima nos retorna todas as linhas da planilha dados que contém informações sobre estações; de fato, cada linha acima corresponde a uma estação.
In [8]:
estacoes = dados[dados.Station.notnull()]
Podemos investigar os índices desta nova tabela estacoes (a coluna mais à esquerda mostrada acima, que não faz parte da tabela, mas é um índice criado pelo Pandas para acessar os elementos da tabela)
In [9]:
estacoes.index
Out[9]:
Int64Index([ 0, 1043, 2770, 4935, 7634, 9902, 10644, 11061, 12560,
14493,
...
57393, 57496, 57544, 57556, 57575, 57587, 57606, 57625, 57644,
57663],
dtype='int64', length=119)
Observe que os índices da tabela estacoes ainda se referem aos índices das linhas correspondentes na tabela original! Isso ocorre pois extraímos a tabela estacoes da tabela dados.
In [10]:
estacoes.index[4]
Out[10]:
7634
In [11]:
estacoes.index[1]
Out[11]:
1043
Agora, vamos analisar o que acontece apenas na primeira estação; para isso, vamos selecionar da tabela original apenas as linhas que estão entre as informações da estação 1 e as informações da estação 2 (lembrando que os índices do Python iniciam-se no zero). Usando o método loc:
In [12]:
dados.loc[estacoes.index[0]+1:estacoes.index[1]-1,:]
Out[12]:
Cruise
Station
Type
mon/day/yr
hh:mm
Longitude [degrees_east]
Latitude [degrees_north]
Bot. Depth [m]
Cast
QF
...
QF.19
Oxygen [ml l]
QF.20
Num Scan per bin
QF.21
flag
QF.22
Section Longitude:DOUBLE
QF.23
QV:ODV:SAMPLE
1
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.09
1
42
1
NaN
1
NaN
1
1
2
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.18
1
46
1
NaN
1
NaN
1
1
3
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.23
1
36
1
NaN
1
NaN
1
1
4
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.18
1
26
1
NaN
1
NaN
1
1
5
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.27
1
28
1
NaN
1
NaN
1
1
6
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.23
1
55
1
NaN
1
NaN
1
1
7
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.18
1
27
1
NaN
1
NaN
1
1
8
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.14
1
53
1
NaN
1
NaN
1
1
9
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.09
1
44
1
NaN
1
NaN
1
1
10
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.17
1
48
1
NaN
1
NaN
1
1
11
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.20
1
53
1
NaN
1
NaN
1
1
12
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.15
1
47
1
NaN
1
NaN
1
1
13
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.16
1
43
1
NaN
1
NaN
1
1
14
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.14
1
53
1
NaN
1
NaN
1
1
15
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.10
1
59
1
NaN
1
NaN
1
1
16
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.08
1
59
1
NaN
1
NaN
1
1
17
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.02
1
42
1
NaN
1
NaN
1
1
18
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.09
1
60
1
NaN
1
NaN
1
1
19
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.12
1
41
1
NaN
1
NaN
1
1
20
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.07
1
34
1
NaN
1
NaN
1
1
21
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.03
1
49
1
NaN
1
NaN
1
1
22
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.09
1
44
1
NaN
1
NaN
1
1
23
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.04
1
22
1
NaN
1
NaN
1
1
24
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.04
1
21
1
NaN
1
NaN
1
1
25
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.06
1
24
1
NaN
1
NaN
1
1
26
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.08
1
24
1
NaN
1
NaN
1
1
27
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.02
1
33
1
NaN
1
NaN
1
1
28
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.02
1
46
1
NaN
1
NaN
1
1
29
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.89
1
22
1
NaN
1
NaN
1
1
30
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.89
1
17
1
NaN
1
NaN
1
1
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
1013
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.48
1
37
1
NaN
1
NaN
1
1
1014
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.48
1
27
1
NaN
1
NaN
1
1
1015
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.49
1
38
1
NaN
1
NaN
1
1
1016
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.48
1
33
1
NaN
1
NaN
1
1
1017
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.48
1
24
1
NaN
1
NaN
1
1
1018
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.47
1
21
1
NaN
1
NaN
1
1
1019
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.47
1
22
1
NaN
1
NaN
1
1
1020
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.47
1
21
1
NaN
1
NaN
1
1
1021
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.47
1
26
1
NaN
1
NaN
1
1
1022
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.46
1
43
1
NaN
1
NaN
1
1
1023
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.47
1
62
1
NaN
1
NaN
1
1
1024
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.46
1
46
1
NaN
1
NaN
1
1
1025
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.46
1
33
1
NaN
1
NaN
1
1
1026
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.45
1
28
1
NaN
1
NaN
1
1
1027
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.45
1
32
1
NaN
1
NaN
1
1
1028
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.45
1
29
1
NaN
1
NaN
1
1
1029
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.43
1
28
1
NaN
1
NaN
1
1
1030
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.44
1
34
1
NaN
1
NaN
1
1
1031
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.44
1
33
1
NaN
1
NaN
1
1
1032
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.44
1
43
1
NaN
1
NaN
1
1
1033
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.44
1
42
1
NaN
1
NaN
1
1
1034
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.43
1
22
1
NaN
1
NaN
1
1
1035
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.43
1
20
1
NaN
1
NaN
1
1
1036
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.43
1
31
1
NaN
1
NaN
1
1
1037
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.42
1
1
1
NaN
1
NaN
1
1
1038
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.62
1
26
1
NaN
1
NaN
1
1
1039
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.81
1
33
1
NaN
1
NaN
1
1
1040
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
4.89
1
30
1
NaN
1
NaN
1
1
1041
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.00
1
27
1
NaN
1
NaN
1
1
1042
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
1
1
...
1
5.04
1
25
1
NaN
1
NaN
1
1
1042 rows × 57 columns
Salvamos estes dados na nova tabela estacao1:
In [13]:
estacao1 = dados.loc[estacoes.index[0]+1:estacoes.index[1]-1,:]
Agora, queremos extrair dos dados desta estação a média das medições de oxigênio na água.
In [14]:
estacao1.columns
Out[14]:
Index(['Cruise', 'Station', 'Type', 'mon/day/yr', 'hh:mm',
'Longitude [degrees_east]', 'Latitude [degrees_north]',
'Bot. Depth [m]', 'Cast', 'QF', 'Scan', 'QF.1', 'Time', 'QF.2', 'DR',
'QF.3', 'Pressure [db]', 'QF.4', 'Temperature_1 [C]', 'QF.5',
'Temperature_2 [C]', 'QF.6', 'Conductivity_1 [mS cm]', 'QF.7',
'Conductivity_2 [mS cm]', 'QF.8', 'OV', 'QF.9', 'Fluorescence [mg/m^3]',
'QF.10', 'Prof [m]', 'QF.11', 'PTEMP_1', 'QF.12', 'PTEMP_2', 'QF.13',
'Salinity_1', 'QF.14', 'Salinity_2', 'QF.15', 'DENS_1 [mS cm]', 'QF.16',
'DENS_2', 'QF.17', 'PDENS_1 [mS cm]', 'QF.18', 'PDENS_2', 'QF.19',
'Oxygen [ml l]', 'QF.20', 'Num Scan per bin', 'QF.21', 'flag', 'QF.22',
'Section Longitude:DOUBLE', 'QF.23', 'QV:ODV:SAMPLE\r'],
dtype='object')
In [15]:
estacao1['Oxygen [ml l]']
Out[15]:
1 5.09
2 5.18
3 5.23
4 5.18
5 5.27
6 5.23
7 5.18
8 5.14
9 5.09
10 5.17
11 5.20
12 5.15
13 5.16
14 5.14
15 5.10
16 5.08
17 5.02
18 5.09
19 5.12
20 5.07
21 5.03
22 5.09
23 5.04
24 5.04
25 5.06
26 5.08
27 5.02
28 5.02
29 4.89
30 4.89
...
1013 4.48
1014 4.48
1015 4.49
1016 4.48
1017 4.48
1018 4.47
1019 4.47
1020 4.47
1021 4.47
1022 4.46
1023 4.47
1024 4.46
1025 4.46
1026 4.45
1027 4.45
1028 4.45
1029 4.43
1030 4.44
1031 4.44
1032 4.44
1033 4.44
1034 4.43
1035 4.43
1036 4.43
1037 4.42
1038 4.62
1039 4.81
1040 4.89
1041 5.00
1042 5.04
Name: Oxygen [ml l], dtype: float64
In [16]:
estacao1['Oxygen [ml l]'].mean()
Out[16]:
4.8428023032629568
Agora, vamos fazer um gráfico das medições, marcando a média calculada acima no gráfico.
In [19]:
import matplotlib.pyplot as plt
%matplotlib inline
In [20]:
plt.plot(estacao1['Oxygen [ml l]'])
Out[20]:
[<matplotlib.lines.Line2D at 0x7fc71acd3ba8>]
Observe que é possível obtermos uma lista dos índices de uma tabela do Pandas usando o método tabela.index.values. No nosso caso, para nossa tabela estacao1, temos:
In [21]:
list(estacao1.index.values)
Out[21]:
[1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632,
633,
634,
635,
636,
637,
638,
639,
640,
641,
642,
643,
644,
645,
646,
647,
648,
649,
650,
651,
652,
653,
654,
655,
656,
657,
658,
659,
660,
661,
662,
663,
664,
665,
666,
667,
668,
669,
670,
671,
672,
673,
674,
675,
676,
677,
678,
679,
680,
681,
682,
683,
684,
685,
686,
687,
688,
689,
690,
691,
692,
693,
694,
695,
696,
697,
698,
699,
700,
701,
702,
703,
704,
705,
706,
707,
708,
709,
710,
711,
712,
713,
714,
715,
716,
717,
718,
719,
720,
721,
722,
723,
724,
725,
726,
727,
728,
729,
730,
731,
732,
733,
734,
735,
736,
737,
738,
739,
740,
741,
742,
743,
744,
745,
746,
747,
748,
749,
750,
751,
752,
753,
754,
755,
756,
757,
758,
759,
760,
761,
762,
763,
764,
765,
766,
767,
768,
769,
770,
771,
772,
773,
774,
775,
776,
777,
778,
779,
780,
781,
782,
783,
784,
785,
786,
787,
788,
789,
790,
791,
792,
793,
794,
795,
796,
797,
798,
799,
800,
801,
802,
803,
804,
805,
806,
807,
808,
809,
810,
811,
812,
813,
814,
815,
816,
817,
818,
819,
820,
821,
822,
823,
824,
825,
826,
827,
828,
829,
830,
831,
832,
833,
834,
835,
836,
837,
838,
839,
840,
841,
842,
843,
844,
845,
846,
847,
848,
849,
850,
851,
852,
853,
854,
855,
856,
857,
858,
859,
860,
861,
862,
863,
864,
865,
866,
867,
868,
869,
870,
871,
872,
873,
874,
875,
876,
877,
878,
879,
880,
881,
882,
883,
884,
885,
886,
887,
888,
889,
890,
891,
892,
893,
894,
895,
896,
897,
898,
899,
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
...]
Assim, é possível obtermos o mesmo gráfico que o visto acima, com o seguinte comando:
In [22]:
plt.plot(list(estacao1.index.values),estacao1['Oxygen [ml l]'])
Out[22]:
[<matplotlib.lines.Line2D at 0x7fc71a1aee80>]
Finalmente, vamos plotar nosso gráfico incluindo uma linha horizontal denotando a média dos valores. Calculamos a média usando o método mean do Pandas.
In [24]:
plt.plot(estacao1['Oxygen [ml l]'])
plt.axhline(y=estacao1['Oxygen [ml l]'].mean(), linestyle = "dashed", color = "r")
plt.title("Oxygen [ml l] for Station 1")
Out[24]:
<matplotlib.text.Text at 0x7fc71a0e5080>
(Fim da Aula 4, ministrada em 22/09/2016)
Content source: melissawm/oceanobiopython
Similar notebooks: