Escolar Documentos
Profissional Documentos
Cultura Documentos
O que é pandas?
O pandas é uma biblioteca muito usada para análise de dados em Python,
que é uma das linguagens de programação mais populares da atualidade.
(revisado em 2020)
Existem alguns atalhos bastante úteis para trabalhar com Jupyter Notebook:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 1/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [1]:
x = 10
In [2]:
Out[2]:
x
10
In [3]:
y = 5
In [4]:
Out[4]:
x + y
15
In [5]:
nome = 'José'
In [6]:
Out[8]:
nome_completo
'José da Silva'
Preparando o Ambiente
Importando as bibliotecas que iremos usar no treinamento:
In [9]:
import pandas as pd
import seaborn
Importando os dadosas sns de um arquivo '.csv' contendo dados do IGM
a partir
preparado especificamente para usarmos neste treinamento.
Esse arquivo foi construído a partir de uma série de colunas que compõe o
IGM e também de notas do ENEM.
In [10]:
igm = pd.read_csv('../input/igm_modificado.csv')
Temos uma variável chamada igm que está guardando algo, para
descobrirmos basta digitar igm e apertar Shift + Enter :
In [11]:
Out[11]:
igm
SANTANA DE
1 SUDESTE SP 3547304
PARNAIBA
SAO BERNARDO
3 SUDESTE SP 3548708
DO CAMPO
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 3/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
BALNEARIO
8 SUL SC 4202008
CAMBORIU
CENTRO-
15 GO OUVIDOR 5215504
OESTE
CORDILHEIRA
18 SUL SC 4204350
ALTA
CENTRO- CHAPADAO DO
22 GO 5205471
OESTE CEU
CASIMIRO DE
25 SUDESTE RJ 3301306
ABREU
CARLOS
27 SUL RS 4304804
BARBOSA
CENTRO-
29 MS BATAGUASSU 5001904
OESTE
... ... ... ... ...
APARECIDA DO
5540 NORTE TO 1701101
RIO NEGRO
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 4/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
MIRACEMA DO
5551 NORTE TO 1713205
TOCANTINS
SANTA MARIA DO
5553 NORTE TO 1718881
TOCANTINS
SANTA FE DO
5558 NORTE TO 1718865
ARAGUAIA
SAO MIGUEL DO
5559 NORTE TO 1720200
TOCANTINS
AXIXA DO
5566 NORTE TO 1702901
TOCANTINS
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 5/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
1. Index
2. Elemento do Index
3. Colunas
4. Nome da coluna (pode ter espaço, acento e etc, mas nome
curto, simples, e representativo facilita o código)
5. '...'
6. Células (Dados)
7. NaNs
Para vermos apenas uma pequena parte, temos o comando .head() irá
mostrar por padrão as 5 primeiras linhas do que existe dentro de um conjunto
de dados dentro de um objeto do pandas.
In [12]:
Out[12]:
igm.head()
In [13]:
Out[13]:
igm.tail()
AXIXA DO
5566 NORTE TO 1702901 0
TOCANTINS
PONTE ALTA
5568 NORTE TO DO 1717909 0
TOCANTINS
In [14]:
Out[14]:
igm.sample(5)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 7/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
ROLIM DE
1992 NORTE RO 1100288 0
MOURA
Encadeamento de funcionalidades
In [15]:
Out[15]:
igm.sample(5).T
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 8/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [16]:
Out[16]:
igm[0:5].T
0 1 2
estado SP SP SC
SANTANA
municipio ILHABELA DE BOMB
PARNAIBA
codigo_mun 3520400 3547304 420245
capital 0 0 0
Pequeno Grande Pequen
porte
porte 2 porte porte 1
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 9/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
0 1 2
populacao 32,782 129,261 18,052
area 347.52 179.95 35.92
densidade_dem 81.1 604.7 398
pib 3.25671e+06 7.3736e+06 377357
pib_pc 105113 60939.9 23135.
participacao_transf_receita 77 51 32
servidores 1495 6157 583
comissionados 74 587 48
comissionados_por_servidor 5% 10% 8%
perc_pop_econ_ativa 1.18 1.04 1.09
taxa_empreendedorismo 0.22 0.25 0.32
anos_estudo_empreendedor 8.43613 10.8695 8.8366
jornada_trabalho 42.7262 42.5429 40.314
gasto_pc_saude 1529.48 1017.67 830.7
hab_p_medico 394.988 400.728 1126.4
exp_vida 75.56 75.92 76.86
gasto_pc_educacao 1734.52 1704.93 1370.9
exp_anos_estudo 10.63 10.01 10.44
nota_ciencias 482.054 483.998 472.10
nota_humanas 541.226 542.76 541.95
nota_linguagem 530.651 535.765 523.25
nota_mat 507.953 499.911 474.50
nota_redacao 499.361 547.507 515
idhm 0.747 0.885 0.807
ranking_igm 1º 2º 3º
indice_governanca 0.767 0.759 0.758
In [17]:
Out[17]:
igm[-5:].T
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 10/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [18]:
Out[18]:
igm[20:30].T
20 21 22
CENTRO
regiao SUL SUDESTE
OESTE
estado RS RJ GO
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 11/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
20 21 22
CHAPAD
municipio TUPANDI NITEROI
DO CEU
codigo_mun 4322251 3303302 5205471
capital 0 0 0
Pequeno Pequeno
porte Grande porte
porte 1 porte 1
populacao 4,421 497,883 8,853
area 59.54 133.92 2,185.12
densidade_dem 65.9 3,640.80 3.2
pib 315220 1.99085e+07 920448
pib_pc 74204.2 40284.3 114455
participacao_transf_receita 83 44 69
servidores 211 8069 319
comissionados 47 2313 152
comissionados_por_servidor 22% 29% 48%
perc_pop_econ_ativa 1.37 1.04 1.13
taxa_empreendedorismo 0.32 0.23 0.17
anos_estudo_empreendedor 6.07866 11.4691 7.67473
jornada_trabalho 48.1071 39.6601 41.4746
gasto_pc_saude 1051.32 387.87 1166.68
hab_p_medico 430.9 1182.51 1039.75
exp_vida 75.18 76.23 75.2
gasto_pc_educacao 1515.19 315.29 1435.33
exp_anos_estudo 8.73 9.68 9.45
nota_ciencias 489.912 525.791 464.188
nota_humanas 557.019 583.141 511.89
nota_linguagem 541.564 554.622 506.294
nota_mat 544.64 555.132 484.97
nota_redacao 549.6 639.916 480
idhm 0.656 0.94 0.714
ranking_igm 21º 22º 23º
indice_governanca 0.693 0.693 0.691
Slicing no Pandas
O nome dessa operação de colocar algo entre colchetes é slicing, e isso como
convenção geral é uma forma de selecionar um subconjunto de dados.
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 12/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Selecionando colunas
In [19]:
Out[19]:
igm['porte']
0 Pequeno porte 2
1 Grande porte
2 Pequeno porte 1
3 Grande porte
4 Grande porte
5 Grande porte
6 Grande porte
7 Pequeno porte 2
8 Grande porte
9 Médio porte
10 Médio porte
11 Grande porte
12 Pequeno porte 1
13 Médio porte
14 Grande porte
15 Pequeno porte 1
16 Grande porte
17 Grande porte
18 Pequeno porte 1
19 Grande porte
20 Pequeno porte 1
21 Grande porte
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 13/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
22 Pequeno porte 1
23 Grande porte
24 Pequeno porte 2
25 Pequeno porte 2
26 Grande porte
27 Pequeno porte 2
28 Pequeno porte 1
29 Pequeno porte 2
...
5540 Pequeno porte 1
5541 Pequeno porte 1
5542 Pequeno porte 1
5543 Pequeno porte 1
5544 Pequeno porte 1
5545 Pequeno porte 1
5546 Pequeno porte 1
5547 Pequeno porte 1
5548 Pequeno porte 1
5549 Pequeno porte 1
5550 Pequeno porte 1
5551 Pequeno porte 1
5552 Pequeno porte 1
5553 Pequeno porte 1
5554 Pequeno porte 1
5555 Pequeno porte 1
5556 Pequeno porte 1
5557 Pequeno porte 1
5558 Pequeno porte 1
5559 Pequeno porte 1
5560 Pequeno porte 1
5561 Pequeno porte 1
5562 Pequeno porte 1
5563 Pequeno porte 1
5564 Pequeno porte 1
5565 Pequeno porte 1
5566 Pequeno porte 1
5567 Pequeno porte 1
5568 Pequeno porte 1
5569 Pequeno porte 1
Name: porte, Length: 5570, dtype: object
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 14/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [20]:
Out[20]:
igm[['municipio', 'indice_governanca']]
municipio indice_governanca
0 ILHABELA 0.767
1 SANTANA DE PARNAIBA 0.759
2 BOMBINHAS 0.758
3 SAO BERNARDO DO CAMPO 0.756
4 BRASILIA 0.736
5 SANTOS 0.731
6 INDAIATUBA 0.727
7 GRAMADO 0.727
8 BALNEARIO CAMBORIU 0.726
9 RIO DO SUL 0.720
10 SAO SEBASTIAO 0.714
11 JUNDIAI 0.712
12 FLOR DO SERTAO 0.707
13 CONCORDIA 0.703
14 VITORIA 0.702
15 OUVIDOR 0.700
16 SAO PAULO 0.694
17 PIRACICABA 0.693
18 CORDILHEIRA ALTA 0.693
19 CHAPECO 0.693
20 TUPANDI 0.693
21 NITEROI 0.693
22 CHAPADAO DO CEU 0.691
23 SOROCABA 0.691
24 SANTA HELENA 0.690
25 CASIMIRO DE ABREU 0.689
26 BARRETOS 0.689
27 CARLOS BARBOSA 0.688
28 BURITIZAL 0.688
29 BATAGUASSU 0.685
... ... ...
5540 APARECIDA DO RIO NEGRO NaN
5541 PINDORAMA DO TOCANTINS NaN
5542 ARAGUANA NaN
5543 PARANA NaN
5544 PALMEIRANTE NaN
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 15/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
municipio indice_governanca
5545 FIGUEIROPOLIS NaN
5546 SAMPAIO NaN
5547 MATEIROS NaN
5548 ITACAJA NaN
5549 NATIVIDADE NaN
5550 CRISTALANDIA NaN
5551 MIRACEMA DO TOCANTINS NaN
5552 ARAGUACEMA NaN
5553 SANTA MARIA DO TOCANTINS NaN
5554 AUGUSTINOPOLIS NaN
5555 AGUIARNOPOLIS NaN
5556 TOCANTINIA NaN
5557 BABACULANDIA NaN
5558 SANTA FE DO ARAGUAIA NaN
5559 SAO MIGUEL DO TOCANTINS NaN
5560 ANGICO NaN
5561 ARAPOEMA NaN
5562 CASEARA NaN
5563 PIRAQUE NaN
5564 ITAPIRATINS NaN
5565 RIO DOS BOIS NaN
5566 AXIXA DO TOCANTINS NaN
5567 FILADELFIA NaN
5568 PONTE ALTA DO TOCANTINS NaN
5569 SILVANOPOLIS NaN
In [21]:
Out[21]:
type(igm['porte'])
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 16/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
pandas.core.series.Series
1. Index
2. Index label
3. Hidden values
4. Series Name
5. Lenght
6. dtype
Vamos contar quantos valores da coluna porte temos para cada tipo com o
comando value_counts() :
In [22]:
Out[22]:
igm['porte'].value_counts()
Pequeno porte 1 3810
Pequeno porte 2 1101
Médio porte 350
Grande porte 309
Name: porte, dtype: int64
Para garantir que nossos gráficos vão ser plotados em todas as versões
do Jupyter Notebook precisamos rodar o comando abaixo:
In [23]:
%matplotlib inline
In [24]:
Out[24]:
igm['porte'].value_counts().plot.bar()
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
6d8381d0>
Exercícios: Series
In [25]:
ind_des = igm['indice_governanca']
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 18/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [26]:
Out[26]:
ind_des.count()
3303
In [27]:
Out[27]:
ind_des.size
5570
In [28]:
Out[28]:
ind_des.isnull()
0 False
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
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 19/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
19 False
20 False
21 False
22 False
23 False
24 False
25 False
26 False
27 False
28 False
29 False
...
5540 True
5541 True
5542 True
5543 True
5544 True
5545 True
5546 True
5547 True
5548 True
5549 True
5550 True
5551 True
5552 True
5553 True
5554 True
5555 True
5556 True
5557 True
5558 True
5559 True
5560 True
5561 True
5562 True
5563 True
5564 True
5565 True
5566 True
5567 True
5568 True
5569 True
Name: indice_governanca, Length: 5570, dtype:
bool
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 20/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [29]:
Out[29]:
ind_des.isnull().sum()
2267
In [30]:
Out[30]:
ind_des.dropna()
0 0.767
1 0.759
2 0.758
3 0.756
4 0.736
5 0.731
6 0.727
7 0.727
8 0.726
9 0.720
10 0.714
11 0.712
12 0.707
13 0.703
14 0.702
15 0.700
16 0.694
17 0.693
18 0.693
19 0.693
20 0.693
21 0.693
22 0.691
23 0.691
24 0.690
25 0.689
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 21/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
26 0.689
27 0.688
28 0.688
29 0.685
...
3273 0.330
3274 0.329
3275 0.328
3276 0.326
3277 0.323
3278 0.323
3279 0.322
3280 0.320
3281 0.319
3282 0.319
3283 0.319
3284 0.317
3285 0.316
3286 0.315
3287 0.314
3288 0.313
3289 0.310
3290 0.308
3291 0.308
3292 0.308
3293 0.307
3294 0.305
3295 0.304
3296 0.299
3297 0.298
3298 0.296
3299 0.282
3300 0.279
3301 0.278
3302 0.258
Name: indice_governanca, Length: 3303, dtype:
float64
Ele retornou os valores, e podemos ver que não tem nenhum valor em branco,
mas vamos verificar de fato para ver se mudamos os nossos valores:
In [31]:
Out[31]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 22/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
ind_des.isnull().sum()
2267
Não mudou, por que isso aconteceu? Uma série de funções no pandas não
alteram o objeto em questão, porque muitas vezes estamos fazendo
transformações temporárias para gerar uma visualização ou análise, para
mudar o objeto temos que passar um parâmetro a mais que é
o inplace=True .
In [32]:
ind_des.dropna(inplace=True)
In [33]:
Out[33]:
ind_des.isnull().sum()
0
In [34]:
Out[34]:
ind_des.min()
0.258
In [35]:
Out[35]:
ind_des.max()
0.767
In [36]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 23/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Out[36]:
ind_des.mean()
0.5019585225552526
In [37]:
Out[37]:
ind_des.std()
0.08370404317359417
Um comando muito útil para avaliar uma Series é o .describe() , que irá
calcular os quartis, valores máximo, mínimo, a média e o desvio padrão.
In [38]:
Out[38]:
ind_des.describe()
count 3303.000000
mean 0.501959
std 0.083704
min 0.258000
25% 0.438000
50% 0.504000
75% 0.566000
max 0.767000
Name: indice_governanca, dtype: float64
In [39]:
Out[39]:
igm.describe()
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 24/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [40]:
Out[40]:
ind_des.hist()
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
6c787240>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 25/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [41]:
sns.kdeplot(ind_des)
/opt/conda/lib/python3.6/site-packages/scipy/sta
ts/stats.py:1713: FutureWarning: Using a non-tup
le sequence for multidimensional indexing is dep
recated; use `arr[tuple(seq)]` instead of `arr[s
eq]`. In the future this will be interpreted as
an array index, `arr[np.array(seq)]`, which will
result either in an error or a different result.
return np.add.reduce(sorted[indexer] * weight
s, axis=axis) / sumval
Out[41]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
6c582978>
In [42]:
sns.distplot(ind_des.dropna())
/opt/conda/lib/python3.6/site-packages/scipy/s
tats/stats.py:1713: FutureWarning: Using a non
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 26/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Out[42]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
6d7b4668>
Exercícios: Histogramas
Fazendo Filtros
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 27/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [43]:
Out[43]:
igm[igm['regiao']=='NORDESTE']
MATA DE SAO
236 NORDESTE BA 2921005 0
JOAO
JOAO
241 NORDESTE PB 2507507 1
PESSOA
JUAZEIRO DO
680 NORDESTE CE 2307304 0
NORTE
SAO
749 NORDESTE RN GONCALO DO 2412005 0
AMARANTE
LUIS
826 NORDESTE BA EDUARDO 2919553 0
MAGALHAES
FEIRA DE
837 NORDESTE BA 2910800 0
SANTANA
AGUA
972 NORDESTE PI 2200202 0
BRANCA
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 28/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
BARRA DOS
1028 NORDESTE SE 2800605 0
COQUEIROS
LAGOA
5155 NORDESTE RN 2406205 0
D'ANTA
MONTE
5158 NORDESTE RN 2407807 0
ALEGRE
RAFAEL
5159 NORDESTE RN 2410504 0
FERNANDES
RAFAEL
5160 NORDESTE RN 2410603 0
GODEIRO
SANTA ROSA
5233 NORDESTE SE 2806503 0
DE LIMA
ILHA DAS
5235 NORDESTE SE 2802700 0
FLORES
SAO
5236 NORDESTE SE 2806909 0
FRANCISCO
SAO MIGUEL
5237 NORDESTE SE 2807006 0
DO ALEIXO
MALHADA
5239 NORDESTE SE 2803807 0
DOS BOIS
BREJO
5240 NORDESTE SE 2800704 0
GRANDE
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 29/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
SAO
5245 NORDESTE SE 2806800 0
DOMINGOS
CEDRO DE
5246 NORDESTE SE 2801603 0
SAO JOAO
NOSSA
5248 NORDESTE SE SENHORA DE 2804706 0
LOURDES
In [44]:
Out[44]:
igm['regiao']=='NORDESTE'
0 False
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
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 30/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
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
...
5540 False
5541 False
5542 False
5543 False
5544 False
5545 False
5546 False
5547 False
5548 False
5549 False
5550 False
5551 False
5552 False
5553 False
5554 False
5555 False
5556 False
5557 False
5558 False
5559 False
5560 False
5561 False
5562 False
5563 False
5564 False
5565 False
5566 False
5567 False
5568 False
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 31/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
5569 False
Name: regiao, Length: 5570, dtype: bool
In [45]:
filtro = igm['regiao']=='NORDESTE'
In [46]:
Out[46]:
igm[filtro].T
67 77 236
regiao NORDESTE NORDESTE NORD
estado PE CE BA
MATA
municipio IPOJUCA FORTALEZA
SAO J
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 32/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
67 77 236
nota_humanas 505.182 542.763 508.2
nota_linguagem 503.077 525.145 493.7
nota_mat 449.238 500.962 442.0
nota_redacao 480.989 574.68 472.3
idhm 0.42 0.742 0.537
ranking_igm 68º 78º 237º
indice_governanca 0.659 0.656 0.622
In [47]:
nordeste = igm[filtro]
In [48]:
Out[48]:
nordeste.sample(5).T
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 33/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [49]:
Out[49]:
nordeste['perc_pop_econ_ativa'].describe()
count 1794.000000
mean 0.791488
std 0.122635
min 0.290000
25% 0.710000
50% 0.790000
75% 0.870000
max 1.300000
Name: perc_pop_econ_ativa, dtype: float64
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 34/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [50]:
Out[50]:
nordeste['perc_pop_econ_ativa'].hist(bins=50)
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
69c2f320>
Exercícios: Filtros
In [51]:
filtro_nordeste = ~nordeste['perc_pop_econ_ativa'].isnull()
In [52]:
Out[52]:
nordeste[filtro_nordeste].sort_values(by='perc_pop_econ_ativ
a', ascending=False)[0:5].T
5005 4060 2423
regiao NORDESTE NORDESTE NORDEST
estado PE PI PE
FERNANDO SANTA
SAO JOSE
municipio DE CRUZ DO
DO PIAUI
NORONHA CAPIBAR
codigo_mun 2605459 2210201 2612505
capital 0 0 0
Pequeno Pequeno
porte Grande po
porte 1 porte 1
populacao 2,974 6,606 103,660
area 17.02 364.95 335.31
densidade_dem 154.6 18.1 261.2
pib 75674 35426 1.11505e+
pib_pc 26674 5350.55 11506.3
participacao_transf_receita NaN 94 80
servidores NaN 272 1279
comissionados 32 7 250
comissionados_por_servidor #DIV/0! 3% 20%
perc_pop_econ_ativa 1.3 1.18 1.16
taxa_empreendedorismo 0.28 0.2 0.41
anos_estudo_empreendedor 9.02845 3.69642 5.87179
jornada_trabalho 47.3527 36.8904 41.2779
gasto_pc_saude NaN 334.82 286.66
hab_p_medico NaN 1653.75 4725.33
exp_vida 75.36 67.02 73.35
gasto_pc_educacao NaN 565.31 380.68
exp_anos_estudo 10.76 9.12 8.34
nota_ciencias 483.8 449.5 472.55
nota_humanas 548.046 489.55 530.973
nota_linguagem 528.269 472.304 512.221
nota_mat 467.531 430.717 484.59
nota_redacao 540 496.538 549.647
idhm 0.823 NaN 0.489
ranking_igm NaN NaN 2424º
indice_governanca NaN NaN 0.442
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 36/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [53]:
filtro_2 = ~igm['perc_pop_econ_ativa'].isnull()
Outra forma de escrever isso é utilizando dois filtros ao mesmo tempo, para
isso temos que usar o operador lógico & que representa E , também temos
a oportunidade usar o operador lógico | , que significa OU :
In [54]:
Out[54]:
igm[filtro & filtro_2].sort_values(by='perc_pop_econ_ativa',
ascending=False)[0:5].T
5005 4060 2423
regiao NORDESTE NORDESTE NORD
estado PE PI PE
FERNANDO SANTA
SAO JOSE
municipio DE CRUZ
DO PIAUI
NORONHA CAPIBA
codigo_mun 2605459 2210201 261250
capital 0 0 0
Pequeno Pequeno
porte Grande
porte 1 porte 1
populacao 2,974 6,606 103,66
area 17.02 364.95 335.31
densidade_dem 154.6 18.1 261.2
pib 75674 35426 1.1150
pib_pc 26674 5350.55 11506.
participacao_transf_receita NaN 94 80
servidores NaN 272 1279
comissionados 32 7 250
comissionados_por_servidor #DIV/0! 3% 20%
perc_pop_econ_ativa 1.3 1.18 1.16
taxa_empreendedorismo 0.28 0.2 0.41
anos_estudo_empreendedor 9.02845 3.69642 5.8717
jornada_trabalho 47.3527 36.8904 41.277
gasto_pc_saude NaN 334.82 286.66
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 37/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [55]:
Out[55]:
igm.shape
(5570, 32)
In [56]:
Out[56]:
nordeste.shape
(1794, 32)
In [57]:
Out[57]:
igm['municipio'].shape
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 38/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
(5570,)
Note pelo comando a seguir como o shape é diferente entre a seleção com:
1. [] - Series - 1 dimensão
2. [[]] - DataFrame - 2 dimensões
In [58]:
Out[58]:
igm[['municipio']].shape
(5570, 1)
In [59]:
Out[59]:
filtro.shape
(5570,)
In [60]:
Out[60]:
filtro_nordeste.shape
(1794,)
Note que o segundo filtro que utilizamos tem o mesmo tamanho do primeiro
filtro e do DataFrame original
In [61]:
Out[61]:
filtro_2.shape
(5570,)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 39/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Se algum aviso desse tipo acontecer, você já tem uma boa ideia do que pode
ter acontecido.
In [62]:
nordeste[filtro_2]
/opt/conda/lib/python3.6/site-packages/ipykernel
_launcher.py:1: UserWarning: Boolean Series key
will be reindexed to match DataFrame index.
"""Entry point for launching an IPython kerne
l.
Out[62]:
MATA DE SAO
236 NORDESTE BA 2921005 0
JOAO
JOAO
241 NORDESTE PB 2507507 1
PESSOA
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 40/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
JUAZEIRO DO
680 NORDESTE CE 2307304 0
NORTE
SAO
749 NORDESTE RN GONCALO DO 2412005 0
AMARANTE
LUIS
826 NORDESTE BA EDUARDO 2919553 0
MAGALHAES
FEIRA DE
837 NORDESTE BA 2910800 0
SANTANA
AGUA
972 NORDESTE PI 2200202 0
BRANCA
MADRE DE
994 NORDESTE BA 2919926 0
DEUS
BARRA DOS
1028 NORDESTE SE 2800605 0
COQUEIROS
LAGOA
5155 NORDESTE RN 2406205 0
D'ANTA
MONTE
5158 NORDESTE RN 2407807 0
ALEGRE
RAFAEL
5159 NORDESTE RN 2410504 0
FERNANDES
RAFAEL
5160 NORDESTE RN 2410603 0
GODEIRO
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 41/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
SANTA ROSA
5233 NORDESTE SE 2806503 0
DE LIMA
ILHA DAS
5235 NORDESTE SE 2802700 0
FLORES
SAO
5236 NORDESTE SE 2806909 0
FRANCISCO
SAO MIGUEL
5237 NORDESTE SE 2807006 0
DO ALEIXO
MALHADA
5239 NORDESTE SE 2803807 0
DOS BOIS
BREJO
5240 NORDESTE SE 2800704 0
GRANDE
RIACHAO DO
5241 NORDESTE SE 2805802 0
DANTAS
SAO
5245 NORDESTE SE 2806800 0
DOMINGOS
CEDRO DE
5246 NORDESTE SE 2801603 0
SAO JOAO
NOSSA
5248 NORDESTE SE SENHORA DE 2804706 0
LOURDES
operador E - &
4. Crie um novo DataFrame chamado igm_idhm_ou_trabalho que
use os filtros filtro_com_idhm e filtro_trabalho com o
operador OU - |
5. Pegue o .shape dos DataFrames dos itens 3 e 4
Manipulação de Strings
In [63]:
igm.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5570 entries, 0 to 5569
Data columns (total 32 columns):
regiao 5570 non-null o
bject
estado 5570 non-null o
bject
municipio 5570 non-null o
bject
codigo_mun 5570 non-null i
nt64
capital 5570 non-null i
nt64
porte 5570 non-null o
bject
populacao 5570 non-null o
bject
area 5570 non-null o
bject
densidade_dem 5566 non-null o
bject
pib 5570 non-null f
loat64
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 43/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 44/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Como podemos notar, temos algumas colunas que são númeircas mas que
estão como object , o que normalmente irá significar que são texto. Vamos
avaliar o que está acontecendo.
In [64]:
Out[64]:
igm['area'].sample(5)
5404 650.92
391 542.63
1980 677.61
3513 8,976.31
1438 831.21
Name: area, dtype: object
In [65]:
igm['area'].astype(float)
----------------------------------------------
-----------------------------
ValueError Trac
eback (most recent call last)
<ipython-input-65-e1989c26aeea> in <module>()
----> 1 igm['area'].astype(float)
/opt/conda/lib/python3.6/site-packages/pandas/
util/_decorators.py in wrapper(*args, **kwarg
s)
176 else:
177 kwargs[new_arg_nam
e] = new_arg_value
--> 178 return func(*args, **kwarg
s)
179 return wrapper
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 45/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
/opt/conda/lib/python3.6/site-packages/pandas/
core/generic.py in astype(self, dtype, copy, e
rrors, **kwargs)
4999 # else, only a single dtyp
e is given
5000 new_data = self._data.asty
pe(dtype=dtype, copy=copy, errors=errors,
-> 5001
**kwargs)
5002 return self._constructor(n
ew_data).__finalize__(self)
5003
/opt/conda/lib/python3.6/site-packages/pandas/
core/internals.py in astype(self, dtype, **kwa
rgs)
3712
3713 def astype(self, dtype, **kwargs):
-> 3714 return self.apply('astype', dt
ype=dtype, **kwargs)
3715
3716 def convert(self, **kwargs):
/opt/conda/lib/python3.6/site-packages/pandas/
core/internals.py in apply(self, f, axes, filt
er, do_integrity_check, consolidate, **kwargs)
3579
3580 kwargs['mgr'] = self
-> 3581 applied = getattr(b, f)(**
kwargs)
3582 result_blocks = _extend_bl
ocks(applied, result_blocks)
3583
/opt/conda/lib/python3.6/site-packages/pandas/
core/internals.py in astype(self, dtype, copy,
errors, values, **kwargs)
573 def astype(self, dtype, copy=False
, errors='raise', values=None, **kwargs):
574 return self._astype(dtype, cop
y=copy, errors=errors, values=values,
--> 575 **kwargs)
576
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 46/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
/opt/conda/lib/python3.6/site-packages/pandas/
core/internals.py in _astype(self, dtype, cop
y, errors, values, klass, mgr, **kwargs)
662
663 # _astype_nansafe work
s fine with 1-d only
--> 664 values = astype_nansaf
e(values.ravel(), dtype, copy=True)
665 values = values.reshap
e(self.shape)
666
/opt/conda/lib/python3.6/site-packages/pandas/
core/dtypes/cast.py in astype_nansafe(arr, dty
pe, copy)
728
729 if copy:
--> 730 return arr.astype(dtype, copy=
True)
731 return arr.view(dtype)
732
O comando não funciona porque temos valores que ele não sabe o que fazer,
em específico a vírgula separando os milhares. Para corrigir isso basta usar o
comando .str.replace()
In [66]:
Out[66]:
igm['area'].str.replace(',','').astype(float).sample(10)
840 630.71
2544 146.78
2274 196.57
2400 506.46
1285 242.96
2940 711.74
468 132.78
293 229.40
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 47/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
1433 681.63
1721 543.36
Name: area, dtype: float64
In [67]:
igm['area'] = igm['area'].str.replace(',','').astype(float)
In [68]:
Out[68]:
igm['populacao'].sample(10)
249 31,578
3923 8,336
182 3,876
812 4,982
1445 13,240
4989 20,681
996 45,414
543 48,096
2640 5,710
5323 3,869
Name: populacao, dtype: object
In [69]:
igm['populacao'] = igm['populacao'].str.replace(',','')
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 48/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [70]:
igm['populacao'] = igm['populacao'].astype(float)
----------------------------------------------
-----------------------------
ValueError Trac
eback (most recent call last)
<ipython-input-70-9102d628b755> in <module>()
----> 1 igm['populacao'] = igm['populacao'].as
type(float)
/opt/conda/lib/python3.6/site-packages/pandas/
util/_decorators.py in wrapper(*args, **kwarg
s)
176 else:
177 kwargs[new_arg_nam
e] = new_arg_value
--> 178 return func(*args, **kwarg
s)
179 return wrapper
180 return _deprecate_kwarg
/opt/conda/lib/python3.6/site-packages/pandas/
core/generic.py in astype(self, dtype, copy, e
rrors, **kwargs)
4999 # else, only a single dtyp
e is given
5000 new_data = self._data.asty
pe(dtype=dtype, copy=copy, errors=errors,
-> 5001
**kwargs)
5002 return self._constructor(n
ew_data).__finalize__(self)
5003
/opt/conda/lib/python3.6/site-packages/pandas/
core/internals.py in astype(self, dtype, **kwa
rgs)
3712
3713 def astype(self, dtype, **kwargs):
-> 3714 return self.apply('astype', dt
ype=dtype, **kwargs)
3715
3716 def convert(self, **kwargs):
/opt/conda/lib/python3.6/site-packages/pandas/
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 49/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
/opt/conda/lib/python3.6/site-packages/pandas/
core/internals.py in astype(self, dtype, copy,
errors, values, **kwargs)
573 def astype(self, dtype, copy=False
, errors='raise', values=None, **kwargs):
574 return self._astype(dtype, cop
y=copy, errors=errors, values=values,
--> 575 **kwargs)
576
577 def _astype(self, dtype, copy=Fals
e, errors='raise', values=None,
/opt/conda/lib/python3.6/site-packages/pandas/
core/internals.py in _astype(self, dtype, cop
y, errors, values, klass, mgr, **kwargs)
662
663 # _astype_nansafe work
s fine with 1-d only
--> 664 values = astype_nansaf
e(values.ravel(), dtype, copy=True)
665 values = values.reshap
e(self.shape)
666
/opt/conda/lib/python3.6/site-packages/pandas/
core/dtypes/cast.py in astype_nansafe(arr, dty
pe, copy)
728
729 if copy:
--> 730 return arr.astype(dtype, copy=
True)
731 return arr.view(dtype)
732
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 50/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Desta vez não funcionou, porque de acordo com a mensagem de erro, além
de vírgulas temos . e temos um (1) solto de acordo com a nossa
mensagem de erro.
Vamos tirar o .
In [71]:
igm['populacao'] = igm['populacao'].str.replace('.','')
Para tirar o ('1') , uma forma é quebrando a string em vários pedaços, para
isso usamos o split() . Vamos começar com um exemplo fora
do DataFrame para ilustrar melhor o conceito:
In [72]:
valor_problema = '41.487(1)'
In [73]:
Out[73]:
valor_problema.split('(')
['41.487', '1)']
Para selcionar o que tinha antes basta selecionarmos a posição 0 por meio do
comando [0]
In [74]:
Out[74]:
valor_problema.split('(')[0]
'41.487'
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 51/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [75]:
igm['populacao'] = igm['populacao'].str.split('(')
In [76]:
Out[76]:
igm['populacao'].sample(10)
3615 [4836]
1836 [4493]
3318 [2249]
1538 [2518]
1853 [15024]
1742 [18849]
194 [2918]
2522 [23535]
1247 [19046]
2972 [2656]
Name: populacao, dtype: object
In [77]:
igm['populacao'] = igm['populacao'].str[0]
Vamos imprimir os valores da coluna e ver que já temos algo com cara de
número, mas que ainda é um object
In [78]:
Out[78]:
igm['populacao'].sample(10)
1011 23308
3341 43293
648 3715
2095 21433
613 3147
4633 18319
342 14227
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 52/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
255 2467
357 65135
2569 11727
Name: populacao, dtype: object
In [79]:
igm['populacao'] = igm['populacao'].astype(float)
Podemos multiplicar, somar, dividir, subtrair entre colunas, para isso basta
usar os respectivos sinais.
In [80]:
Out[80]:
igm['populacao'] / igm['area']
0 94.331262
1 718.316199
2 502.561247
3 2007.769883
4 515.089273
5 1547.579007
6 755.471032
7 146.457554
8 2848.767301
9 261.397862
10 210.903723
11 940.933652
12 27.187606
13 91.570455
14 3724.414750
15 15.085311
16 7914.072618
17 286.211150
18 51.327540
19 334.717120
20 74.252603
21 3717.764337
22 4.051494
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 53/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
23 1448.734402
24 33.848568
25 89.343924
26 76.587322
27 121.027001
28 16.428947
29 9.134679
...
5540 4.026302
5541 2.908107
5542 6.675598
5543 0.938525
5544 2.180005
5545 2.781764
5546 20.234828
5547 0.265450
5548 2.436291
5549 2.870041
5550 3.992988
5551 7.281380
5552 2.495627
5553 2.343207
5554 45.220011
5555 26.793832
5556 2.839407
5557 6.007403
5558 4.360910
5559 29.471942
5560 7.528834
5561 4.366005
5562 3.069820
5563 2.221394
5564 3.016174
5565 3.297952
5566 64.849211
5567 4.462094
5568 1.212732
5569 4.267455
Length: 5570, dtype: float64
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 54/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [81]:
Comparando Densidades
In [82]:
Out[82]:
igm[['municipio','populacao','area','densidade_dem', 'densida
de_2']].sample(10)
municipio populacao area densidade_dem de
885 GENTIL 1708.0 184.01 9.1 9.
SANTA
3544 ISABEL DO 23092.0 62800.08 0.30 0.
RIO NEGRO
ANTONIO
2100 11584.0 529.92 21 21
CARLOS
1553 GUZOLANDIA 5142.0 252.48 18.9 20
3698 FATIMA 3882.0 382.91 9.9 10
2388 CUPARAQUE 4972.0 226.75 20.6 21
1210 TUPA 65705.0 627.99 101 10
2582 MIRADOURO 10799.0 301.67 34 35
4506 LAJE 24112.0 449.83 48.5 53
SANTO
3172 ANTONIO DO 7315.0 796.29 8.7 9.
RETIRO
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 55/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [83]:
igm['densidade_dem'] = igm['densidade_2']
Deletando colunas
In [84]:
igm.drop(columns='densidade_2', inplace=True)
In [85]:
igm['comissionados_por_servidor'] = igm['comissionados']/igm[
'servidores']
Revisão
Exercícios: Revisão
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 56/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Conteúdos Adicionais
Gráficos Interativos
In [86]:
conda/lib/python3.6/site-packages (3.4.2)
Requirement already satisfied: decorator>=4.0.
6 in /opt/conda/lib/python3.6/site-packages (f
rom plotly) (4.3.0)
Requirement already satisfied: retrying>=1.3.3
in /opt/conda/lib/python3.6/site-packages (fro
m plotly) (1.3.3)
Requirement already satisfied: requests in /op
t/conda/lib/python3.6/site-packages (from plot
ly) (2.20.1)
Requirement already satisfied: nbformat>=4.2 i
n /opt/conda/lib/python3.6/site-packages (from
plotly) (4.4.0)
Requirement already satisfied: pytz in /opt/co
nda/lib/python3.6/site-packages (from plotly)
(2018.4)
Requirement already satisfied: six in /opt/con
da/lib/python3.6/site-packages (from plotly)
(1.11.0)
Requirement already satisfied: certifi>=2017.
4.17 in /opt/conda/lib/python3.6/site-packages
(from requests->plotly) (2018.10.15)
Requirement already satisfied: chardet<3.1.0,>
=3.0.2 in /opt/conda/lib/python3.6/site-packag
es (from requests->plotly) (3.0.4)
Requirement already satisfied: urllib3<1.25,>=
1.21.1 in /opt/conda/lib/python3.6/site-packag
es (from requests->plotly) (1.22)
Requirement already satisfied: idna<2.8,>=2.5
in /opt/conda/lib/python3.6/site-packages (fro
m requests->plotly) (2.6)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 57/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [87]:
In [88]:
plotly.init_notebook_mode(connected=True)
In [89]:
pyplot_data = [go.Histogram(x=igm['exp_vida'])]
In [90]:
plotly.iplot(pyplot_data)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 58/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [91]:
In [92]:
plotly.iplot(pyplot_data_norm)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 59/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Vamos salvar o nosso igm de volta no disco. Mas dessa vez vamos separar
os campos por ; (ponto e vírgula) em vez da , (vírgula) que era utilizada
no nosso arquivo original, e vamos usar a , (vírgula) como separador
decimal em vez do . (ponto)
In [93]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 60/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [94]:
pd.read_csv('igm_virgula.csv', sep=';').info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5570 entries, 0 to 5569
Data columns (total 32 columns):
regiao 5570 non-null o
bject
estado 5570 non-null o
bject
municipio 5570 non-null o
bject
codigo_mun 5570 non-null i
nt64
capital 5570 non-null i
nt64
porte 5570 non-null o
bject
populacao 5570 non-null o
bject
area 5570 non-null o
bject
densidade_dem 5570 non-null o
bject
pib 5570 non-null o
bject
pib_pc 5570 non-null o
bject
participacao_transf_receita 4893 non-null o
bject
servidores 5233 non-null o
bject
comissionados 5570 non-null o
bject
comissionados_por_servidor 5233 non-null o
bject
perc_pop_econ_ativa 5565 non-null o
bject
taxa_empreendedorismo 5570 non-null o
bject
anos_estudo_empreendedor 5570 non-null o
bject
jornada_trabalho 5570 non-null o
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 61/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
bject
gasto_pc_saude 4881 non-null o
bject
hab_p_medico 4951 non-null o
bject
exp_vida 5565 non-null o
bject
gasto_pc_educacao 4880 non-null o
bject
exp_anos_estudo 5565 non-null o
bject
nota_ciencias 5558 non-null o
bject
nota_humanas 5558 non-null o
bject
nota_linguagem 5557 non-null o
bject
nota_mat 5557 non-null o
bject
nota_redacao 5557 non-null o
bject
idhm 4986 non-null o
bject
ranking_igm 3303 non-null o
bject
indice_governanca 3303 non-null o
bject
dtypes: int64(2), object(30)
memory usage: 1.4+ MB
In [95]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 62/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 63/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
loat64
nota_ciencias 5558 non-null f
loat64
nota_humanas 5558 non-null f
loat64
nota_linguagem 5557 non-null f
loat64
nota_mat 5557 non-null f
loat64
nota_redacao 5557 non-null f
loat64
idhm 4986 non-null f
loat64
ranking_igm 3303 non-null o
bject
indice_governanca 3303 non-null f
loat64
dtypes: float64(25), int64(2), object(5)
memory usage: 1.4+ MB
In [96]:
Out[96]:
pd.read_excel('../input/exemplo_1.xls')
ESTIMATIVAS DA
POPULAÇÃO RESIDENTE NO
BRASIL E UNIDADES DA Unnamed:
Unnamed: 2
FEDERAÇÃO COM DATA DE 1
REFERÊNCIA EM 1º DE
JULHO DE 2017
BRASIL E UNIDADES DA POPULAÇÃO
0 NaN
FEDERAÇÃO ESTIMADA
1 Brasil NaN 207660929
2 Região Norte NaN 17936201
3 Rondônia NaN 1805788
4 Acre NaN 829619
5 Amazonas NaN 4063614
6 Roraima NaN 522636
7 Pará NaN 8366628
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 64/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
ESTIMATIVAS DA
POPULAÇÃO RESIDENTE NO
BRASIL E UNIDADES DA Unnamed:
Unnamed: 2
FEDERAÇÃO COM DATA DE 1
REFERÊNCIA EM 1º DE
JULHO DE 2017
8 Amapá NaN 797722
9 Tocantins NaN 1550194
10 Região Nordeste NaN 57254159
11 Maranhão NaN 7000229
12 Piauí NaN 3.219.257 (*)
13 Ceará NaN 9.020.460 (*)
14 Rio Grande do Norte NaN 3507003
15 Paraíba NaN 4025558
16 Pernambuco NaN 9.473.266 (**)
17 Alagoas NaN 3.375.823 (**)
18 Sergipe NaN 2288116
19 Bahia NaN 15344447
20 Região Sudeste NaN 86949714
21 Minas Gerais NaN 21119536
22 Espírito Santo NaN 4016356
23 Rio de Janeiro NaN 16718956
24 São Paulo NaN 45094866
25 Região Sul NaN 29644948
26 Paraná NaN 11320892
27 Santa Catarina NaN 7001161
28 Rio Grande do Sul NaN 11322895
29 Região Centro-Oeste NaN 15875907
30 Mato Grosso do Sul NaN 2713147
31 Mato Grosso NaN 3344544
32 Goiás NaN 6778772
33 Distrito Federal NaN 3039444
34 NaN NaN NaN
Fonte: IBGE. Diretoria de
35 NaN NaN
Pesquisas - DPE - C...
36 Notas: NaN NaN
(*) diferença de 772 pessoas
37 NaN NaN
entre os Estados...
(**) diferença de 441 pessoas
38 NaN NaN
entre os Estado...
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 65/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [97]:
Out[97]:
pd.read_excel('../input/exemplo_1.xls', sheet_name='Município
s')
ESTIMATIVAS
DA
POPULAÇÃO
RESIDENTE
NOS
MUNICÍPIOS
Unnamed: Unnamed:
BRASILEIROS Unnamed: 3
1 2
COM DATA
DE
REFERÊNCIA
EM 1º DE
JULHO DE
2017
COD. NOME DO
0 UF COD. UF
MUNIC MUNICÍPIO
Alta Floresta
1 RO 11 00015
D'Oeste
2 RO 11 00023 Ariquemes
3 RO 11 00031 Cabixi
4 RO 11 00049 Cacoal
5 RO 11 00056 Cerejeiras
Colorado do
6 RO 11 00064
Oeste
7 RO 11 00072 Corumbiara
Costa
8 RO 11 00080
Marques
Espigão
9 RO 11 00098
D'Oeste
Guajará-
10 RO 11 00106
Mirim
11 RO 11 00114 Jaru
12 RO 11 00122 Ji-Paraná
Machadinho
13 RO 11 00130
D'Oeste
Nova
14 RO 11 00148 Brasilândia
D'Oeste
Ouro Preto
15 RO 11 00155
do Oeste
Pimenta
16 RO 11 00189
Bueno
17 RO 11 00205 Porto Velho
Presidente
18 RO 11 00254
Médici
19 RO 11 00262 Rio Crespo
Rolim de
20 RO 11 00288
Moura
Santa Luzia
21 RO 11 00296
D'Oeste
22 RO 11 00304 Vilhena
São Miguel
23 RO 11 00320
do Guaporé
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 66/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
ESTIMATIVAS
DA
POPULAÇÃO
RESIDENTE
NOS
MUNICÍPIOS
Unnamed: Unnamed:
BRASILEIROS Unnamed: 3
1 2
COM DATA
DE
REFERÊNCIA
EM 1º DE
JULHO DE
2017
Nova
24 RO 11 00338
Mamoré
Alvorada
25 RO 11 00346
D'Oeste
Alto Alegre
26 RO 11 00379
dos Parecis
27 RO 11 00403 Alto Paraíso
28 RO 11 00452 Buritis
Novo
29 RO 11 00502 Horizonte do
Oeste
... ... ... ... ...
Três
5555 GO 52 21304
Ranchos
5556 GO 52 21403 Trindade
5557 GO 52 21452 Trombas
5558 GO 52 21502 Turvânia
5559 GO 52 21551 Turvelândia
5560 GO 52 21577 Uirapuru
5561 GO 52 21601 Uruaçu
5562 GO 52 21700 Uruana
5563 GO 52 21809 Urutaí
Valparaíso de
5564 GO 52 21858
Goiás
5565 GO 52 21908 Varjão
5566 GO 52 22005 Vianópolis
5567 GO 52 22054 Vicentinópolis
5568 GO 52 22203 Vila Boa
5569 GO 52 22302 Vila Propício
5570 DF 53 00108 Brasília
Fonte: IBGE.
Diretoria de
5571 NaN NaN NaN
Pesquisas -
DPE - C...
5572 NaN NaN NaN NaN
5573 Notas: NaN NaN NaN
(1) População
judicial do
5574 NaN NaN NaN
município de
Porto V...
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 67/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
ESTIMATIVAS
DA
POPULAÇÃO
RESIDENTE
NOS
MUNICÍPIOS
Unnamed: Unnamed:
BRASILEIROS Unnamed: 3
1 2
COM DATA
DE
REFERÊNCIA
EM 1º DE
JULHO DE
2017
(2) População
judicial do
5575 NaN NaN NaN
município de
Manaqui...
(3) População
judicial do
5576 NaN NaN NaN
município de
Santa I...
(4) População
judicial do
5577 NaN NaN NaN
município de
Uarini-...
(5) População
judicial do
5578 NaN NaN NaN
município de
Urucará...
(6) População
judicial do
5579 NaN NaN NaN
município de
Jacarea...
(7) População
judicial do
5580 NaN NaN NaN
município de
Paço do...
(8) População
judicial do
5581 NaN NaN NaN
município
Livramento...
(9) População
judicial do
5582 NaN NaN NaN
município de
Taperoá...
(10)
População
5583 judicial do NaN NaN NaN
município
Sairé -PE...
(11) População
judicial do
5584 NaN NaN NaN
município
Coronel J...
Por padrão o cabeçalho do nosso arquivo vai ser a primeira linha de texto,
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 68/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [98]:
Out[98]:
pd.read_excel('../input/exemplo_1.xls', sheet_name='Município
s', header=1)
COD. COD. NOME DO POPULA
UF
UF MUNIC MUNICÍPIO ESTIMAD
Alta Floresta
0 RO 11.0 15.0 25437
D'Oeste
1 RO 11.0 23.0 Ariquemes 107345
2 RO 11.0 31.0 Cabixi 6224
3 RO 11.0 49.0 Cacoal 88507
4 RO 11.0 56.0 Cerejeiras 17934
Colorado do
5 RO 11.0 64.0 18467
Oeste
6 RO 11.0 72.0 Corumbiara 8659
Costa
7 RO 11.0 80.0 17400
Marques
Espigão
8 RO 11.0 98.0 33030
D'Oeste
Guajará-
9 RO 11.0 106.0 47451
Mirim
10 RO 11.0 114.0 Jaru 55871
11 RO 11.0 122.0 Ji-Paraná 132667
Machadinho
12 RO 11.0 130.0 38609
D'Oeste
Nova
13 RO 11.0 148.0 Brasilândia 21747
D'Oeste
Ouro Preto
14 RO 11.0 155.0 39759
do Oeste
Pimenta
15 RO 11.0 189.0 38051
Bueno
16 RO 11.0 205.0 Porto Velho 519.436
Presidente
17 RO 11.0 254.0 22124
Médici
18 RO 11.0 262.0 Rio Crespo 3829
Rolim de
19 RO 11.0 288.0 57074
Moura
Santa Luzia
20 RO 11.0 296.0 8198
D'Oeste
21 RO 11.0 304.0 Vilhena 95630
São Miguel
22 RO 11.0 320.0 24181
do Guaporé
Nova
23 RO 11.0 338.0 28891
Mamoré
Alvorada
24 RO 11.0 346.0 16747
D'Oeste
Alto Alegre
25 RO 11.0 379.0 14045
dos Parecis
26 RO 11.0 403.0 Alto Paraíso 20916
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 69/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 70/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [99]:
pd.read_excel('../input/exemplo_1.xls', sheet_name='Município
/opt/conda/lib/python3.6/site-packages/pandas/
s', header=1, skip_footer=14)
util/_decorators.py:178: FutureWarning:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 71/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
'skipfooter' instead
Out[99]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 73/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [100]:
df = pd.read_excel('../input/exemplo_1.xls', sheet_name='Muni
/opt/conda/lib/python3.6/site-packages/pandas/ut
cípios', header=[1], skip_footer=14)
il/_decorators.py:178: FutureWarning:
In [101]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5570 entries, 0 to 5569
Data columns (total 5 columns):
UF 5570 non-null object
COD. UF 5570 non-null int64
COD. MUNIC 5570 non-null int64
NOME DO MUNICÍPIO 5570 non-null object
POPULAÇÃO ESTIMADA 5570 non-null object
dtypes: int64(2), object(3)
memory usage: 217.7+ KB
In [102]:
In [103]:
Out[103]:
df.sample(5)
In [104]:
sns.distplot(igm[igm['regiao'] == 'NORDESTE']['indice_governa
/opt/conda/lib/python3.6/site-packages/scipy/s
nca'].dropna(), label='NORDESTE')
tats/stats.py:1713: FutureWarning:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 75/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Out[104]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5eb80f28>
In [105]:
sns.distplot(igm[igm['regiao'] == 'SUDESTE']['indice_governan
/opt/conda/lib/python3.6/site-packages/scipy/sta
ca'].dropna(), label='SUDESTE')
ts/stats.py:1713: FutureWarning:
Out[105]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
69a4f630>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 76/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Para plotar vários gráficos ao mesmo tempo com legenda, vamos precisar
importar uma parte do matplotlib :
In [106]:
In [107]:
sns.distplot(igm[igm['regiao'] == 'NORDESTE']['indice_governa
/opt/conda/lib/python3.6/site-packages/scipy/sta
nca'].dropna(), label='NORDESTE')
ts/stats.py:1713: FutureWarning:
sns.distplot(igm[igm['regiao'] == 'SUDESTE']['indice_governan
ca'].dropna(), label='SUDESTE')
Using a non-tuple sequence for multidimensional
plt.legend()
indexing is deprecated; use `arr[tuple(seq)]` in
stead of `arr[seq]`. In the future this will be
interpreted as an array index, `arr[np.array(se
q)]`, which will result either in an error or a
different result.
Out[107]:
<matplotlib.legend.Legend at 0x7f786c6d0e80>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 77/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [108]:
sns.distplot(igm[igm['regiao'] == 'NORDESTE']['indice_governa
/opt/conda/lib/python3.6/site-packages/scipy/sta
nca'].dropna(), label='NORDESTE')
ts/stats.py:1713: FutureWarning:
sns.distplot(igm[igm['regiao'] == 'SUDESTE']['indice_governan
ca'].dropna(), label='SUDESTE')
Using a non-tuple sequence for multidimensional
sns.distplot(igm[igm['regiao'] == 'CENTRO-OESTE']['indice_gov
indexing is deprecated; use `arr[tuple(seq)]` in
ernanca'].dropna(),
stead of `arr[seq]`.label='CENTRO-OESTE')
In the future this will be
plt.legend()
interpreted as an array index, `arr[np.array(se
q)]`, which will result either in an error or a
different result.
Out[108]:
<matplotlib.legend.Legend at 0x7f785ce730f0>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 78/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [109]:
sns.distplot(igm[igm['regiao'] == 'NORDESTE']['indice_governa
/opt/conda/lib/python3.6/site-packages/scipy/sta
nca'].dropna(), label='NORDESTE')
ts/stats.py:1713: FutureWarning:
sns.distplot(igm[igm['regiao'] == 'SUDESTE']['indice_governan
ca'].dropna(), label='SUDESTE')
Using a non-tuple sequence for multidimensional
sns.distplot(igm[igm['regiao'] == 'NORTE']['indice_governanc
indexing is deprecated; use `arr[tuple(seq)]` in
a'].dropna(), label='NORTE')
stead of `arr[seq]`. In the future this will be
sns.distplot(igm[igm['regiao']
interpreted as an array index, == 'SUL']['indice_governanca']
`arr[np.array(se
.dropna(),
q)]`, whichlabel='SUL')
will result either in an error or a
sns.distplot(igm[igm['regiao']
different result. == 'CENTRO-OESTE']['indice_gov
ernanca'].dropna(), label='CENTRO-OESTE')
plt.legend()
Out[109]:
<matplotlib.legend.Legend at 0x7f785e9a1fd0>
Visualizando Categorias
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 79/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [110]:
Out[110]:
igm.nunique()
regiao 5
estado 27
municipio 5290
codigo_mun 5570
capital 2
porte 4
populacao 5113
area 5451
densidade_dem 5570
pib 5569
pib_pc 5560
participacao_transf_receita 73
servidores 1542
comissionados 497
comissionados_por_servidor 4488
perc_pop_econ_ativa 119
taxa_empreendedorismo 73
anos_estudo_empreendedor 5566
jornada_trabalho 5566
gasto_pc_saude 4737
hab_p_medico 4757
exp_vida 1135
gasto_pc_educacao 4741
exp_anos_estudo 580
nota_ciencias 5545
nota_humanas 5546
nota_linguagem 5544
nota_mat 5548
nota_redacao 4447
idhm 342
ranking_igm 3303
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 80/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
indice_governanca 390
dtype: int64
Além disso temos estado , mas que não iria ficar tão bom para plotar
gráficos. participacao_transf_receita e taxa_empreendedorismo també
podem ser trabalhadas como variáveis categóricas já que apesar de serem
uma porcentagem, os decimals se perderam e acabamos tendo poucas
opções de variabilidade.
Boxplot
In [111]:
Out[111]:
sns.boxplot(x="regiao", y="indice_governanca", data=igm)
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5e96dda0>
Violin plot
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 81/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Uma forma mais elaborada de fazer isso é com o violin plot, que além de fazer
os quartis, plota em seu lado as distribuições dos valores.
In [112]:
Out[112]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5cdc3518>
In [113]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 82/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Out[113]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5ebab748>
In [114]:
Out[114]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5ece2d30>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 83/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [115]:
/opt/conda/lib/python3.6/site-packages/scipy/sta
ts/stats.py:1713: FutureWarning:
Out[115]:
<seaborn.axisgrid.FacetGrid at 0x7f785ed09208>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 84/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Análisando Frequência:
Para contarmos quantas ocorrências temos por cada categoria podemos usar
o .countplot()
In [116]:
Out[116]:
sns.countplot(x='regiao', data=igm)
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5ea73e48>
In [117]:
Out[117]:
sns.countplot(x='regiao', hue='porte', data=igm)
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5e857cc0>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 85/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [118]:
Out[118]:
<seaborn.axisgrid.FacetGrid at 0x7f785ebaacf8>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 86/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Gráficos de Pizza
In [119]:
Out[119]:
igm['regiao'].value_counts().plot.pie()
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5cb5fac8>
Como vemos acima, não fica tão bom esse gráfico. Uma possibilidade melhor
é usarmos a biblioteca plotly .
Para isso iremos precisar dos nomes das regiões quando fazemos o
comando .value_counts() :
In [120]:
Out[120]:
igm['regiao'].value_counts().index
Index(['NORDESTE', 'SUDESTE', 'SUL', 'CENTRO-OES
TE', 'NORTE'], dtype='object')
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 87/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [121]:
pie_chart = go.Pie(labels=igm['regiao'].value_counts().index,
values=igm['regiao'].value_counts())
plotly.iplot([pie_chart])
In [122]:
Out[122]:
igm.isnull().sum()
regiao 0
estado 0
municipio 0
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 88/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
codigo_mun 0
capital 0
porte 0
populacao 0
area 0
densidade_dem 0
pib 0
pib_pc 0
participacao_transf_receita 677
servidores 337
comissionados 0
comissionados_por_servidor 337
perc_pop_econ_ativa 5
taxa_empreendedorismo 0
anos_estudo_empreendedor 0
jornada_trabalho 0
gasto_pc_saude 689
hab_p_medico 619
exp_vida 5
gasto_pc_educacao 690
exp_anos_estudo 5
nota_ciencias 12
nota_humanas 12
nota_linguagem 13
nota_mat 13
nota_redacao 13
idhm 584
ranking_igm 2267
indice_governanca 2267
dtype: int64
In [123]:
igm['sem_igm'] = igm['indice_governanca'].isnull()
In [124]:
ue='sem_igm')
/opt/conda/lib/python3.6/site-packages/scipy/s
tats/stats.py:1713: FutureWarning:
Out[124]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5c8ea320>
In [125]:
igm['sem_gasto_pc_saude'] = igm['gasto_pc_saude'].isnull()
In [126]:
Out[126]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 90/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5c80c160>
Existe uma função bastante útil no pandas que é o qcut que nos permite
criar categorias a partir de valores contínuos (ou de muitas categorias). Basta
você partir de um princípio de ordenamento e selecionar a quantidade de
categorias final que deseja. No nosso caso escolhemos 3.
In [127]:
Out[127]:
pd.qcut(igm['taxa_empreendedorismo'], 3)
0 (0.2, 0.27]
1 (0.2, 0.27]
2 (0.27, 0.77]
3 (-0.001, 0.2]
4 (-0.001, 0.2]
5 (0.2, 0.27]
6 (-0.001, 0.2]
7 (0.2, 0.27]
8 (0.27, 0.77]
9 (0.2, 0.27]
10 (-0.001, 0.2]
11 (-0.001, 0.2]
12 (0.27, 0.77]
13 (0.2, 0.27]
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 91/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
14 (0.2, 0.27]
15 (-0.001, 0.2]
16 (0.2, 0.27]
17 (-0.001, 0.2]
18 (0.27, 0.77]
19 (0.2, 0.27]
20 (0.27, 0.77]
21 (0.2, 0.27]
22 (-0.001, 0.2]
23 (0.2, 0.27]
24 (0.27, 0.77]
25 (-0.001, 0.2]
26 (-0.001, 0.2]
27 (0.2, 0.27]
28 (-0.001, 0.2]
29 (-0.001, 0.2]
...
5540 (0.2, 0.27]
5541 (-0.001, 0.2]
5542 (0.2, 0.27]
5543 (-0.001, 0.2]
5544 (-0.001, 0.2]
5545 (0.2, 0.27]
5546 (0.27, 0.77]
5547 (0.27, 0.77]
5548 (0.2, 0.27]
5549 (-0.001, 0.2]
5550 (0.2, 0.27]
5551 (-0.001, 0.2]
5552 (-0.001, 0.2]
5553 (-0.001, 0.2]
5554 (0.2, 0.27]
5555 (-0.001, 0.2]
5556 (-0.001, 0.2]
5557 (0.27, 0.77]
5558 (0.2, 0.27]
5559 (0.2, 0.27]
5560 (-0.001, 0.2]
5561 (0.2, 0.27]
5562 (0.27, 0.77]
5563 (-0.001, 0.2]
5564 (0.2, 0.27]
5565 (0.2, 0.27]
5566 (0.27, 0.77]
5567 (-0.001, 0.2]
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 92/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [128]:
igm['cat_te'] = pd.qcut(igm['taxa_empreendedorismo'], 3)
In [129]:
Out[129]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5c761dd8>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 93/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Swarm plot
Um tipo de gráfico interessante é o swarm plot que nos permite ver de forma
granular os pontos que compõe uma distribuição, e nos dão a possibilidade de
análises com a abaixo:
In [130]:
Out[130]:
sns.swarmplot(x="regiao", y="indice_governanca", hue='porte',
data=igm)
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5c657f98>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 94/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [131]:
# sns.set(rc={'figure.figsize':(16.7,8.27)})
In [132]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 95/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Out[132]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5c5cd0b8>
In [133]:
sns.barplot(x="regiao", y="taxa_empreendedorismo",
/opt/conda/lib/python3.6/site-packages/scipy/sta data=igm)
ts/stats.py:1713: FutureWarning:
Out[133]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5c514f60>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 96/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [134]:
sns.barplot(x="regiao", y="anos_estudo_empreendedor",
/opt/conda/lib/python3.6/site-packages/scipy/sta data=i
gm)
ts/stats.py:1713: FutureWarning:
Out[134]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5c4f4588>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 97/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Segue o pib_pc por região. Note que não é uma média ponderada e sim
apenas a média dos munícipios sem levar em conta a população de cada um.
In [135]:
Out[135]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f78
5c45e898>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 98/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Groupby
In [136]:
Out[136]:
igm.groupby('regiao')['pib_pc'].mean()
regiao
CENTRO-OESTE 23911.187623
NORDESTE 8159.934108
NORTE 12249.159778
SUDESTE 21024.014323
SUL 25516.579941
Name: pib_pc, dtype: float64
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 99/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Abaixo iremos plotar em apenas uma linha de código, um gráfico que mostra a
relação entre 'Gastos em saúde e educação per capita' com o 'Índice de
Desempenho'.
In [137]:
sns.pairplot(x_vars=['gasto_pc_educacao'], y_vars=['nota_mat'
/opt/conda/lib/python3.6/site-packages/seaborn/a
], data=igm, hue="regiao",
xisgrid.py:2065: size=5)
UserWarning:
Out[137]:
<seaborn.axisgrid.PairGrid at 0x7f785c437710>
Regressões Lineares
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 100/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [138]:
sns.pairplot(x_vars=['gasto_pc_educacao'], y_vars=['nota_mat'
/opt/conda/lib/python3.6/site-packages/seaborn/a
], data=igm, hue="regiao",
xisgrid.py:2065: kind='reg', size=5)
UserWarning:
/opt/conda/lib/python3.6/site-packages/scipy/sta
ts/stats.py:1713: FutureWarning:
Out[138]:
<seaborn.axisgrid.PairGrid at 0x7f785c34ea20>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 101/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [139]:
igm['nome_len'] = igm['municipio'].str.len()
In [140]:
/opt/conda/lib/python3.6/site-packages/scipy/sta
ts/stats.py:1713: FutureWarning:
Out[140]:
<seaborn.axisgrid.PairGrid at 0x7f785c34e8d0>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 102/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [141]:
In [142]:
/opt/conda/lib/python3.6/site-packages/statsmo
dels/nonparametric/kde.py:448: RuntimeWarning:
/opt/conda/lib/python3.6/site-packages/scipy/s
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 103/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
tats/stats.py:1713: FutureWarning:
Out[142]:
<seaborn.axisgrid.PairGrid at 0x7f785c32bcf8>
In [143]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 104/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Out[143]:
<seaborn.axisgrid.PairGrid at 0x7f785374de48>
1. Fazer um pairplot
usando taxa_empreendedorismo e nota_mat usando hue=porte (apen
1 gráfico e não 4)
2. Fazer um pairplot
usando taxa_empreendedorismo e nota_mat usando hue=porte (4
gráficos)
3. Fazer um pairplot
usando taxa_empreendedorismo , anos_estudo_empreendedor , nota_m
usando hue=porte
Vai acontecer de termos alguns gráficos que não ficam em uma escala
adequada, para isso podemos tentar converter para uma escala logarítimica.
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 105/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [144]:
sns.pairplot(x_vars=['populacao'], y_vars=['indice_governanc
/opt/conda/lib/python3.6/site-packages/seaborn/a
a'], data=igm, hue="regiao",
xisgrid.py:2065: UserWarning:kind='reg', size=5)
/opt/conda/lib/python3.6/site-packages/scipy/sta
ts/stats.py:1713: FutureWarning:
Out[144]:
<seaborn.axisgrid.PairGrid at 0x7f7853046940>
Para converter para log podemos usar o numpy que é uma biblioteca
bastante importante para manipulação de dados, e é a base do pandas .
In [145]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 106/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
import numpy as np
Vamos criar uma coluna nova log_pop com os valores logarítimicos
da populacao por meio da função .log() do numpy :
In [146]:
igm['log_pop'] = np.log(igm['populacao'])
In [147]:
sns.pairplot(x_vars=['log_pop'], y_vars=['indice_governanca'
/opt/conda/lib/python3.6/site-packages/seaborn/a
], data=igm, hue="regiao",
xisgrid.py:2065: kind='reg', size=5)
UserWarning:
/opt/conda/lib/python3.6/site-packages/scipy/sta
ts/stats.py:1713: FutureWarning:
Out[147]:
<seaborn.axisgrid.PairGrid at 0x7f785301da20>
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 107/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Projeto:
Pegue algum dataset de sua escolha ou vá em http://dados.gov.br/ e escolha
algum conjunto de dados que te interesse.
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 108/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [148]:
In [149]:
Out[149]:
igm.sample(5).style.format(format_dict)
ILHA DAS
5235 NORDESTE SE 2802700 0
FLORES
In [150]:
igm.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5570 entries, 0 to 5569
Data columns (total 37 columns):
regiao 5570 non-null o
bject
estado 5570 non-null o
bject
municipio 5570 non-null o
bject
codigo_mun 5570 non-null i
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 109/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
nt64
capital 5570 non-null i
nt64
porte 5570 non-null o
bject
populacao 5570 non-null f
loat64
area 5570 non-null f
loat64
densidade_dem 5570 non-null f
loat64
pib 5570 non-null f
loat64
pib_pc 5570 non-null f
loat64
participacao_transf_receita 4893 non-null f
loat64
servidores 5233 non-null f
loat64
comissionados 5570 non-null f
loat64
comissionados_por_servidor 5233 non-null f
loat64
perc_pop_econ_ativa 5565 non-null f
loat64
taxa_empreendedorismo 5570 non-null f
loat64
anos_estudo_empreendedor 5570 non-null f
loat64
jornada_trabalho 5570 non-null f
loat64
gasto_pc_saude 4881 non-null f
loat64
hab_p_medico 4951 non-null f
loat64
exp_vida 5565 non-null f
loat64
gasto_pc_educacao 4880 non-null f
loat64
exp_anos_estudo 5565 non-null f
loat64
nota_ciencias 5558 non-null f
loat64
nota_humanas 5558 non-null f
loat64
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 110/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [151]:
In [152]:
Out[152]:
igm.sample(5).style.format(format_dict)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 111/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [153]:
In [154]:
Out[154]:
igf
Ranking
Unnamed:
IFGF UF Município IFGF
1
Geral
0 Nacional Estadual NaN NaN NaN
Gavião
1 1 1 SP 0.905346
Peixoto
São Gonçalo
2 2 1 CE 0.875311
do Amarante
3 3 1 SC Bombinhas 0.867852
4 4 2 SP São Pedro 0.85653
Balneário
5 5 2 SC 0.844142
Camboriú
6 6 1 RJ Niterói 0.838358
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 112/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Ranking
Unnamed:
IFGF UF Município IFGF
1
Geral
7 7 1 MT Cláudia 0.828288
8 8 3 SP Indaiatuba 0.827676
9 9 4 SP São Sebastião 0.822041
10 10 5 SP Ilhabela 0.821795
11 11 3 SC Joaçaba 0.818589
São José do
12 12 1 RS 0.805843
Hortêncio
13 13 1 MS Costa Rica 0.803581
14 14 1 MG Extrema 0.792549
15 15 1 AL Traipu 0.790219
16 16 2 MT Sinop 0.789989
17 17 6 SP Caraguatatuba 0.789986
Aparecida de
18 18 1 GO 0.78919
Goiânia
19 19 1 PA Tucumã 0.788871
20 20 3 MT Vila Rica 0.787556
São Miguel do
21 21 2 GO 0.787517
Araguaia
22 22 4 MT Nova Mutum 0.78414
23 23 1 PR Ortigueira 0.782068
São Félix do
24 24 1 BA 0.777015
Coribe
25 25 7 SP Louveira 0.775576
São João do
26 26 1 PI 0.772625
Piauí
27 27 2 RS Forquetinha 0.771405
28 28 2 PR Pato Bragado 0.770608
29 29 1 TO Porto Nacional 0.769519
... ... ... ... ... ...
5539 NaN NaN GO Mairipotaba *
5540 NaN NaN GO Mambaí *
5541 NaN NaN GO Marzagão *
5542 NaN NaN GO Matrinchã *
5543 NaN NaN GO Minaçu *
5544 NaN NaN GO Mutunópolis *
5545 NaN NaN GO Nazário *
5546 NaN NaN GO Nova Crixás *
Nova Iguaçu
5547 NaN NaN GO *
de Goiás
5548 NaN NaN GO Nova Roma *
5549 NaN NaN GO Novo Gama *
5550 NaN NaN GO Orizona *
Palestina de
5551 NaN NaN GO *
Goiás
5552 NaN NaN GO Paranaiguara *
5553 NaN NaN GO Paraúna *
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 113/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Ranking
Unnamed:
IFGF UF Município IFGF
1
Geral
5554 NaN NaN GO Posse *
5555 NaN NaN GO Rio Verde *
5556 NaN NaN GO Sanclerlândia *
Santa Cruz de
5557 NaN NaN GO *
Goiás
Santa
5558 NaN NaN GO Terezinha de *
Goiás
5559 NaN NaN GO São Domingos *
São João
5560 NaN NaN GO *
d'Aliança
5561 NaN NaN GO São Patrício *
5562 NaN NaN GO São Simão *
5563 NaN NaN GO Sítio d'Abadia *
Teresina de
5564 NaN NaN GO *
Goiás
5565 NaN NaN GO Turvânia *
5566 NaN NaN GO Vicentinópolis *
5567 NaN NaN GO Vila Boa *
5568 NaN NaN GO Vila Propício *
In [155]:
igf = igf[1:].copy()
In [156]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 114/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [157]:
igf.rename(columns={'Município':'mun'}, inplace=True)
df.rename(columns={'NOME
Vamos DO MUNICÍPIO':'mun'},
tentar juntar os DataFrames e ver o que acontece: inplace=True)
In [158]:
Out[158]:
df.merge(igf)
Alta Floresta
0 RO 11 15 25437 11
D'Oeste
1 RO 11 23 Ariquemes 107345 11
2 RO 11 31 Cabixi 6224 11
3 RO 11 49 Cacoal 88507 11
4 RO 11 56 Cerejeiras 17934 11
Colorado do
5 RO 11 64 18467 11
Oeste
6 RO 11 72 Corumbiara 8659 11
Costa
7 RO 11 80 17400 11
Marques
Espigão
8 RO 11 98 33030 11
D'Oeste
Guajará-
9 RO 11 106 47451 11
Mirim
10 RO 11 114 Jaru 55871 11
11 RO 11 122 Ji-Paraná 132667 11
Machadinho
12 RO 11 130 38609 11
D'Oeste
Nova
13 RO 11 148 Brasilândia 21747 11
D'Oeste
Ouro Preto
14 RO 11 155 39759 11
do Oeste
Pimenta
15 RO 11 189 38051 11
Bueno
16 RO 11 205 Porto Velho 519.436 (1) 11
Presidente
17 RO 11 254 22124 11
Médici
18 RO 11 262 Rio Crespo 3829 11
Rolim de
19 RO 11 288 57074 11
Moura
Santa Luzia
20 RO 11 296 8198 11
D'Oeste
21 RO 11 304 Vilhena 95630 11
São Miguel
22 RO 11 320 24181 11
do Guaporé
Nova
23 RO 11 338 28891 11
Mamoré
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 115/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Alvorada
24 RO 11 346 16747 11
D'Oeste
Alto Alegre
25 RO 11 379 14045 11
dos Parecis
26 RO 11 403 Alto Paraíso 20916 11
27 RO 11 452 Buritis 39044 11
Novo
28 RO 11 502 Horizonte do 10051 11
Oeste
29 RO 11 601 Cacaulândia 6460 11
... ... ... ... ... ... ...
São João
5496 GO 52 20009 12643 52
d'Aliança
São João da
5497 GO 52 20058 1547 52
Paraúna
São Luís de
5498 GO 52 20108 33118 52
Montes Belos
São Miguel
5499 GO 52 20207 22684 52
do Araguaia
São Miguel
5500 GO 52 20264 do Passa 4037 52
Quatro
5501 GO 52 20280 São Patrício 2070 52
5502 GO 52 20405 São Simão 19697 52
Senador
5503 GO 52 20454 105459 52
Canedo
5504 GO 52 20504 Serranópolis 8323 52
5505 GO 52 20603 Silvânia 20478 52
5506 GO 52 20686 Simolândia 6891 52
5507 GO 52 20702 Sítio d'Abadia 2998 52
Taquaral de
5508 GO 52 21007 3625 52
Goiás
Teresina de
5509 GO 52 21080 3363 52
Goiás
Terezópolis
5510 GO 52 21197 7634 52
de Goiás
Três
5511 GO 52 21304 2900 52
Ranchos
5512 GO 52 21403 Trindade 121266 52
5513 GO 52 21452 Trombas 3571 52
5514 GO 52 21502 Turvânia 4818 52
5515 GO 52 21551 Turvelândia 5050 52
5516 GO 52 21577 Uirapuru 2961 52
5517 GO 52 21601 Uruaçu 40082 52
5518 GO 52 21700 Uruana 14195 52
5519 GO 52 21809 Urutaí 3154 52
Valparaíso de
5520 GO 52 21858 159500 52
Goiás
5521 GO 52 21908 Varjão 3856 52
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 116/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
O nosso DataFrame após o merge() ficou com 5526 linhas, o que significa
que 44 munícipios não estão com nomes iguais entre os DataFrames
In [159]:
Out[159]:
df.merge(igf).shape
(5526, 14)
In [160]:
Out[160]:
df.shape
(5570, 6)
In [161]:
Out[161]:
igf.shape
(5568, 10)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 117/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [162]:
df['Município'] = df['mun']
In [163]:
igf['mun'] = igf['mun'].str.normalize('NFKD').str.encode('asc
ii', errors='ignore').str.decode('utf-8')
Podemos ver que ganhamos mais algumas conversões, mas ainda foram
df['mun']
poucas. = df['mun'].str.normalize('NFKD').str.encode('asci
i', errors='ignore').str.decode('utf-8')
In [164]:
Out[164]:
df.merge(igf).shape
(5534, 15)
Retirando os espaços
In [165]:
In [166]:
Out[166]:
df.merge(igf).shape
(5550, 15)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 118/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
O Comando isin():
In [167]:
df_mun = df[~df.mun.isin(igf['mun'])]['mun'].values
A seguir vamos selecionar os valores da coluna mun de igf que não estão
contidos na coluna mun de df .
In [168]:
igf_mun = igf[~igf.mun.isin(df['mun'])]['mun'].values
In [169]:
In [170]:
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 119/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [171]:
Out[171]:
df.merge(igf).shape
(5550, 15)
In [172]:
Out[172]:
df[~df.mun.isin(igf.mun)]
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 120/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [173]:
Out[173]:
igf[~igf.mun.isin(df.mun)]
Ranking
Ranking
IFGF UF mun IFGF
Estadual
Geral
461 461 15 CE Itapage 0.62208
1528 1528 219 MG Brasopolis 0.52113
1927 1927 63 TO CoutodeMagalhaes 0.49194
2103 2103 34 PE Iguaraci 0.47870
2911 2911 375 SP Embu 0.4252
3217 3217 26 PA SantaIsabeldoPara 0.40297
3586 3586 466 SP MojiMirim 0.36913
3639 3639 80 PB SaoDomingosdePombal 0.36329
3663 3663 461 RS SantanadoLivramento 0.36090
4019 4019 42 SE GrachoCardoso 0.30473
4091 4091 117 PE BelemdeSaoFrancisco 0.29164
4602 NaN NaN PA EldoradodosCarajas *
4702 NaN NaN TO SaoValeriodaNatividade *
4962 NaN NaN PB Serido *
4973 NaN NaN PE LagoadoItaenga *
5327 NaN NaN RJ TrajanodeMorais *
5488 NaN NaN MT Poxoreo *
O comando .at[]
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 121/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [174]:
igf.at[2911,'mun'] = 'EmbudasArtes'
In [175]:
Out[175]:
df[~df.mun.isin(igf.mun)]
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 122/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [176]:
Out[176]:
igf[~igf.mun.isin(df.mun)]
Ranking
Ranking
IFGF UF mun IFGF
Estadual
Geral
461 461 15 CE Itapage 0.62208
1528 1528 219 MG Brasopolis 0.52113
1927 1927 63 TO CoutodeMagalhaes 0.49194
2103 2103 34 PE Iguaraci 0.47870
3217 3217 26 PA SantaIsabeldoPara 0.40297
3586 3586 466 SP MojiMirim 0.36913
3639 3639 80 PB SaoDomingosdePombal 0.36329
3663 3663 461 RS SantanadoLivramento 0.36090
4019 4019 42 SE GrachoCardoso 0.30473
4091 4091 117 PE BelemdeSaoFrancisco 0.29164
4602 NaN NaN PA EldoradodosCarajas *
4702 NaN NaN TO SaoValeriodaNatividade *
4962 NaN NaN PB Serido *
4973 NaN NaN PE LagoadoItaenga *
5327 NaN NaN RJ TrajanodeMorais *
5488 NaN NaN MT Poxoreo *
In [177]:
In [179]:
Out[179]:
df[~df.mun.isin(igf.mun)]
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 123/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
In [180]:
Out[180]:
igf[~igf.mun.isin(df.mun)]
Ranking
Ranking
IFGF UF mun IFGF
Estadual
Geral
461 461 15 CE Itapage 0.62
1528 1528 219 MG Brasopolis 0.52
1927 1927 63 TO CoutodeMagalhaes 0.49
2103 2103 34 PE Iguaraci 0.47
3217 3217 26 PA SantaIsabeldoPara 0.40
3586 3586 466 SP MojiMirim 0.36
3639 3639 80 PB SaoDomingosdePombal 0.36
3663 3663 461 RS SantanadoLivramento 0.36
4019 4019 42 SE GrachoCardoso 0.30
4091 4091 117 PE BelemdeSaoFrancisco 0.29
4602 NaN NaN PA EldoradodosCarajas *
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 124/125
01/11/2021 Introducao a Analise de Dados - Python e pandas | Kaggle
Ranking
Ranking
IFGF UF mun IFGF
Estadual
Geral
4973 NaN NaN PE LagoadoItaenga *
5327 NaN NaN RJ TrajanodeMorais *
5488 NaN NaN MT Poxoreo *
In [181]:
Out[181]:
link code
df.merge(igf).shape
(5553, 15)
https://www.kaggle.com/joaoavf/introducao-a-analise-de-dados-python-e-pandas 125/125