Tópico 5 – DataFrames: Acessando DataFrames e Séries

DataFrames representam tabelas. Vamos finalmente explorar alguns dados!

Resultados Esperados

  1. Entender o DataFrame de pandas/babypandas
  2. Saber acessar linhas e colunas
  3. Entender consultas básicas

Material Adaptado do DSC10 (UCSD)

Os dados de hoje estão aqui

Agenda

Hoje, usaremos um conjunto de dados real e muitas perguntas motivadoras para ilustrar as principais técnicas de manipulação de DataFrame.

Observação:

Alguns links importantes daqui para frente:

-Comandos e Conceitos Úteis.

-babypandas notes.

-babypandas documentation.

Tabelas de Dados

pandas

  • DataFrames (tabelas) são fornecidos por um pacote chamado pandas.
  • pandas é a ferramenta para fazer ciência de dados em Python.

Mas a biblioteca pandas padrão não é tão fofa…

Digite babypandas!

  • Criada pela Universidade de California San Diego (UCSD) criamos uma versão menor e mais agradável de pandas chamada babypandas.
  • Mantém as coisas importantes e tem mensagens de erro muito melhores.
  • É mais fácil de aprender, mas ainda é um código pandas válido.

DataFrames em babypandas 🐼

  • As tabelas em babypandas (e pandas) são chamadas de “DataFrames”.
  • Para usar DataFrames, precisaremos importar babypandas. (Precisaremos de numpy também.)
#In: 
import babypandas as bpd
import numpy as np

Sobre os dados: Feira da Afonso Pena 👷

  • Normalmente trabalharemos com dados armazenados no formato CSV. CSV significa “valores separados por vírgula”.
  • O arquivo afonso_pena.csv contém informações sobre as barracas da feira. Tais dados foram coletados da Prefeitura de Belo Horizonte Dados Abertos PBH.

Lendo dados de um arquivo 📖

Podemos ler em um CSV usando bpd.read_csv(...). Forneça o caminho para um arquivo relativo ao seu notebook (se o arquivo estiver na mesma pasta do seu notebook, esse é apenas o nome do arquivo).

#In: 
# para rodar no colab use 'https://raw.githubusercontent.com/flaviovdf/fcd/main/assets/06-GroupBy/data/afonso_pena.csv'
# i.e., afonso_pena = bpd.read_csv('https://raw.githubusercontent.com/flaviovdf/fcd/main/assets/06-GroupBy/data/afonso_pena.csv')
afonso_pena = bpd.read_csv('afonso_pena.csv')

Estrutura de um DataFrame

  • DataFrames possuem colunas e linhas.
  • Pense em cada coluna como um array. As colunas contêm dados do mesmo tipo.
  • Cada coluna possui um rótulo, por ex. 'NOME_SETOR' e 'NOME_FEIRANTE'.
  • O rótulo de uma coluna é o seu nome.
  • Os rótulos das colunas são armazenados como strings.
  • Cada linha também possui um rótulo.
  • Juntos, os rótulos das linhas são chamados de índice. O índice não é uma coluna!
#In: 
afonso_pena
ID_FEIRA_AFONSO_PENA_BARRACACODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREA
083F.F2.V016BARRACA CARMEN EMMANUEL DOS SANTOS SILVACARMEN EMMANUEL DOS SANTOS SILVAJANA FONSECA VIEIRACriançaBOLSA DE BEBÊ, MALA DE MATERNIDADE, NECESSÁIRE...5.011.838911
184G.F3.V052BARRACA CARMEN FERNANDA ROCHA DE ALCANTARACARMEN FERNANDA ROCHA DE ALCANTARAKARINA RODRIGUES BRANDORFIBijouteriasBRINCO, ANEL, PULSEIRA, COLAR, ARCO5.011.838911
285E.F4.V003BARRACA CARMEN LÚCIA CARVALHO DE ALMEIDACARMEN LÚCIA CARVALHO DE ALMEIDABARBARA ISABELLE CARVALHO DE PAULAVestuário InfantilVESTIDO, CONJUNTO, MACACÃO3.011.838911
386E.F2.V004BARRACA CECÍLIA PAGANO NEVES SALAZARCECÍLIA PAGANO NEVES SALAZARGISELE PAGANO NEVES SALAZARVestuário InfantilMACACÃO, BLUSA, SAPATINHO3.011.827592
487D.F2.V016BARRACA CÉLIA APARECIDA DE SOUZACÉLIA APARECIDA DE SOUZAEDSON PIRES DE SOUZAVestuárioBLUSA, BERMUDA, ROUPA DE GINÁSTICA, SAIA, VEST...7.011.827592
..............................
12451350G.F4.V014BARRACA HELCIO LICIO SILVAHELCIO LICIO SILVAGRAZIELA CRISTINA RAMALHO SILVABijouteriasANEL, COLAR, BROCHE, BRINCO, PULSEIRA, ALIANÇA...7.011.838911
12461351J.F1.V004BARRACA DIEGO DOS SANTOS DIASDIEGO DOS SANTOS DIASCELSO DE SOUZA LINHARESCalçadosRASTEIRINHA, SAPATO, SANDÁLIA3.011.827592
12471352D.F4.V050BARRACA JAIR CORREAJAIR CORREAKeli Aparecida Batista CorreaVestuárioVESTIDO DE MALHA, BATA DE TECIDO, CONJUNTO, SA...5.011.827592
12481353G.F2.V010BARRACA SIDNEY FERNANDO KNEIPP SOARESSIDNEY FERNANDO KNEIPP SOARESANA PAULA FAUSTINA DE SOUZABijouteriasCOLAR, GARGANTILHA, ARCO, ANEL, PASSADOR DE CA...7.011.838911
12491354G.F1.V061BARRACA REGINA GARCIA FERREIRAREGINA GARCIA FERREIRARejane Garcia Ferreira ClementeBijouteriasCOLAR DE METAL, PRESILHA, PASSADOR DE CABELO, ...4.011.827592

1250 rows × 9 columns

Configurando um novo índice

  • Podemos definir um índice melhor usando .set_index(column_name).
  • Os rótulos das linhas devem ser identificadores exclusivos.
  • Os rótulos das linhas são nomes de linhas; idealmente, cada linha tem um nome descritivo diferente.
  • ⚠️ Como a maioria dos métodos DataFrame, .set_index retorna um novo DataFrame; não modifica o DataFrame original.
#In: 
afonso_pena.set_index('ID_FEIRA_AFONSO_PENA_BARRACA')
CODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREA
ID_FEIRA_AFONSO_PENA_BARRACA
83F.F2.V016BARRACA CARMEN EMMANUEL DOS SANTOS SILVACARMEN EMMANUEL DOS SANTOS SILVAJANA FONSECA VIEIRACriançaBOLSA DE BEBÊ, MALA DE MATERNIDADE, NECESSÁIRE...5.011.838911
84G.F3.V052BARRACA CARMEN FERNANDA ROCHA DE ALCANTARACARMEN FERNANDA ROCHA DE ALCANTARAKARINA RODRIGUES BRANDORFIBijouteriasBRINCO, ANEL, PULSEIRA, COLAR, ARCO5.011.838911
85E.F4.V003BARRACA CARMEN LÚCIA CARVALHO DE ALMEIDACARMEN LÚCIA CARVALHO DE ALMEIDABARBARA ISABELLE CARVALHO DE PAULAVestuário InfantilVESTIDO, CONJUNTO, MACACÃO3.011.838911
86E.F2.V004BARRACA CECÍLIA PAGANO NEVES SALAZARCECÍLIA PAGANO NEVES SALAZARGISELE PAGANO NEVES SALAZARVestuário InfantilMACACÃO, BLUSA, SAPATINHO3.011.827592
87D.F2.V016BARRACA CÉLIA APARECIDA DE SOUZACÉLIA APARECIDA DE SOUZAEDSON PIRES DE SOUZAVestuárioBLUSA, BERMUDA, ROUPA DE GINÁSTICA, SAIA, VEST...7.011.827592
...........................
1350G.F4.V014BARRACA HELCIO LICIO SILVAHELCIO LICIO SILVAGRAZIELA CRISTINA RAMALHO SILVABijouteriasANEL, COLAR, BROCHE, BRINCO, PULSEIRA, ALIANÇA...7.011.838911
1351J.F1.V004BARRACA DIEGO DOS SANTOS DIASDIEGO DOS SANTOS DIASCELSO DE SOUZA LINHARESCalçadosRASTEIRINHA, SAPATO, SANDÁLIA3.011.827592
1352D.F4.V050BARRACA JAIR CORREAJAIR CORREAKeli Aparecida Batista CorreaVestuárioVESTIDO DE MALHA, BATA DE TECIDO, CONJUNTO, SA...5.011.827592
1353G.F2.V010BARRACA SIDNEY FERNANDO KNEIPP SOARESSIDNEY FERNANDO KNEIPP SOARESANA PAULA FAUSTINA DE SOUZABijouteriasCOLAR, GARGANTILHA, ARCO, ANEL, PASSADOR DE CA...7.011.838911
1354G.F1.V061BARRACA REGINA GARCIA FERREIRAREGINA GARCIA FERREIRARejane Garcia Ferreira ClementeBijouteriasCOLAR DE METAL, PRESILHA, PASSADOR DE CABELO, ...4.011.827592

1250 rows × 8 columns

#In: 
afonso_pena
ID_FEIRA_AFONSO_PENA_BARRACACODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREA
083F.F2.V016BARRACA CARMEN EMMANUEL DOS SANTOS SILVACARMEN EMMANUEL DOS SANTOS SILVAJANA FONSECA VIEIRACriançaBOLSA DE BEBÊ, MALA DE MATERNIDADE, NECESSÁIRE...5.011.838911
184G.F3.V052BARRACA CARMEN FERNANDA ROCHA DE ALCANTARACARMEN FERNANDA ROCHA DE ALCANTARAKARINA RODRIGUES BRANDORFIBijouteriasBRINCO, ANEL, PULSEIRA, COLAR, ARCO5.011.838911
285E.F4.V003BARRACA CARMEN LÚCIA CARVALHO DE ALMEIDACARMEN LÚCIA CARVALHO DE ALMEIDABARBARA ISABELLE CARVALHO DE PAULAVestuário InfantilVESTIDO, CONJUNTO, MACACÃO3.011.838911
386E.F2.V004BARRACA CECÍLIA PAGANO NEVES SALAZARCECÍLIA PAGANO NEVES SALAZARGISELE PAGANO NEVES SALAZARVestuário InfantilMACACÃO, BLUSA, SAPATINHO3.011.827592
487D.F2.V016BARRACA CÉLIA APARECIDA DE SOUZACÉLIA APARECIDA DE SOUZAEDSON PIRES DE SOUZAVestuárioBLUSA, BERMUDA, ROUPA DE GINÁSTICA, SAIA, VEST...7.011.827592
..............................
12451350G.F4.V014BARRACA HELCIO LICIO SILVAHELCIO LICIO SILVAGRAZIELA CRISTINA RAMALHO SILVABijouteriasANEL, COLAR, BROCHE, BRINCO, PULSEIRA, ALIANÇA...7.011.838911
12461351J.F1.V004BARRACA DIEGO DOS SANTOS DIASDIEGO DOS SANTOS DIASCELSO DE SOUZA LINHARESCalçadosRASTEIRINHA, SAPATO, SANDÁLIA3.011.827592
12471352D.F4.V050BARRACA JAIR CORREAJAIR CORREAKeli Aparecida Batista CorreaVestuárioVESTIDO DE MALHA, BATA DE TECIDO, CONJUNTO, SA...5.011.827592
12481353G.F2.V010BARRACA SIDNEY FERNANDO KNEIPP SOARESSIDNEY FERNANDO KNEIPP SOARESANA PAULA FAUSTINA DE SOUZABijouteriasCOLAR, GARGANTILHA, ARCO, ANEL, PASSADOR DE CA...7.011.838911
12491354G.F1.V061BARRACA REGINA GARCIA FERREIRAREGINA GARCIA FERREIRARejane Garcia Ferreira ClementeBijouteriasCOLAR DE METAL, PRESILHA, PASSADOR DE CABELO, ...4.011.827592

1250 rows × 9 columns

#In: 
afonso_pena = afonso_pena.set_index('ID_FEIRA_AFONSO_PENA_BARRACA')
afonso_pena
CODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREA
ID_FEIRA_AFONSO_PENA_BARRACA
83F.F2.V016BARRACA CARMEN EMMANUEL DOS SANTOS SILVACARMEN EMMANUEL DOS SANTOS SILVAJANA FONSECA VIEIRACriançaBOLSA DE BEBÊ, MALA DE MATERNIDADE, NECESSÁIRE...5.011.838911
84G.F3.V052BARRACA CARMEN FERNANDA ROCHA DE ALCANTARACARMEN FERNANDA ROCHA DE ALCANTARAKARINA RODRIGUES BRANDORFIBijouteriasBRINCO, ANEL, PULSEIRA, COLAR, ARCO5.011.838911
85E.F4.V003BARRACA CARMEN LÚCIA CARVALHO DE ALMEIDACARMEN LÚCIA CARVALHO DE ALMEIDABARBARA ISABELLE CARVALHO DE PAULAVestuário InfantilVESTIDO, CONJUNTO, MACACÃO3.011.838911
86E.F2.V004BARRACA CECÍLIA PAGANO NEVES SALAZARCECÍLIA PAGANO NEVES SALAZARGISELE PAGANO NEVES SALAZARVestuário InfantilMACACÃO, BLUSA, SAPATINHO3.011.827592
87D.F2.V016BARRACA CÉLIA APARECIDA DE SOUZACÉLIA APARECIDA DE SOUZAEDSON PIRES DE SOUZAVestuárioBLUSA, BERMUDA, ROUPA DE GINÁSTICA, SAIA, VEST...7.011.827592
...........................
1350G.F4.V014BARRACA HELCIO LICIO SILVAHELCIO LICIO SILVAGRAZIELA CRISTINA RAMALHO SILVABijouteriasANEL, COLAR, BROCHE, BRINCO, PULSEIRA, ALIANÇA...7.011.838911
1351J.F1.V004BARRACA DIEGO DOS SANTOS DIASDIEGO DOS SANTOS DIASCELSO DE SOUZA LINHARESCalçadosRASTEIRINHA, SAPATO, SANDÁLIA3.011.827592
1352D.F4.V050BARRACA JAIR CORREAJAIR CORREAKeli Aparecida Batista CorreaVestuárioVESTIDO DE MALHA, BATA DE TECIDO, CONJUNTO, SA...5.011.827592
1353G.F2.V010BARRACA SIDNEY FERNANDO KNEIPP SOARESSIDNEY FERNANDO KNEIPP SOARESANA PAULA FAUSTINA DE SOUZABijouteriasCOLAR, GARGANTILHA, ARCO, ANEL, PASSADOR DE CA...7.011.838911
1354G.F1.V061BARRACA REGINA GARCIA FERREIRAREGINA GARCIA FERREIRARejane Garcia Ferreira ClementeBijouteriasCOLAR DE METAL, PRESILHA, PASSADOR DE CABELO, ...4.011.827592

1250 rows × 8 columns

Forma de um DataFrame

  • .shape retorna o número de linhas e colunas em um determinado DataFrame.
  • Acesse cada um com []:
  • .shape[0] para linhas.
  • .shape[1] para colunas.
#In: 
# There were 9 columns before, but one of them became the index, and the index is not a column!
afonso_pena.shape
(1250, 8)
#In: 
# Number of rows
afonso_pena.shape[0]
1250
#In: 
# Number of columns
afonso_pena.shape[1]
8

Exemplo 1: Total, Media e Mediana de Produtos

Conceitos principais: Acessar colunas, entender operações em colunas numéricas.

Encontrando o total de solicitações

  • Pergunta: Como sumarizar uma coluna?
  • Obtenha a coluna
  • Agregue o valor

Etapa 1 – Obtendo uma coluna

  • Podemos obter uma coluna de um DataFrame usando .get(column_name).
  • ⚠️ Os nomes das colunas diferenciam maiúsculas de minúsculas!
  • Os nomes das colunas são strings, então precisamos usar aspas.
  • O resultado parece um DataFrame de 1 coluna, mas na verdade é uma Série.
#In: 
afonso_pena
CODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREA
ID_FEIRA_AFONSO_PENA_BARRACA
83F.F2.V016BARRACA CARMEN EMMANUEL DOS SANTOS SILVACARMEN EMMANUEL DOS SANTOS SILVAJANA FONSECA VIEIRACriançaBOLSA DE BEBÊ, MALA DE MATERNIDADE, NECESSÁIRE...5.011.838911
84G.F3.V052BARRACA CARMEN FERNANDA ROCHA DE ALCANTARACARMEN FERNANDA ROCHA DE ALCANTARAKARINA RODRIGUES BRANDORFIBijouteriasBRINCO, ANEL, PULSEIRA, COLAR, ARCO5.011.838911
85E.F4.V003BARRACA CARMEN LÚCIA CARVALHO DE ALMEIDACARMEN LÚCIA CARVALHO DE ALMEIDABARBARA ISABELLE CARVALHO DE PAULAVestuário InfantilVESTIDO, CONJUNTO, MACACÃO3.011.838911
86E.F2.V004BARRACA CECÍLIA PAGANO NEVES SALAZARCECÍLIA PAGANO NEVES SALAZARGISELE PAGANO NEVES SALAZARVestuário InfantilMACACÃO, BLUSA, SAPATINHO3.011.827592
87D.F2.V016BARRACA CÉLIA APARECIDA DE SOUZACÉLIA APARECIDA DE SOUZAEDSON PIRES DE SOUZAVestuárioBLUSA, BERMUDA, ROUPA DE GINÁSTICA, SAIA, VEST...7.011.827592
...........................
1350G.F4.V014BARRACA HELCIO LICIO SILVAHELCIO LICIO SILVAGRAZIELA CRISTINA RAMALHO SILVABijouteriasANEL, COLAR, BROCHE, BRINCO, PULSEIRA, ALIANÇA...7.011.838911
1351J.F1.V004BARRACA DIEGO DOS SANTOS DIASDIEGO DOS SANTOS DIASCELSO DE SOUZA LINHARESCalçadosRASTEIRINHA, SAPATO, SANDÁLIA3.011.827592
1352D.F4.V050BARRACA JAIR CORREAJAIR CORREAKeli Aparecida Batista CorreaVestuárioVESTIDO DE MALHA, BATA DE TECIDO, CONJUNTO, SA...5.011.827592
1353G.F2.V010BARRACA SIDNEY FERNANDO KNEIPP SOARESSIDNEY FERNANDO KNEIPP SOARESANA PAULA FAUSTINA DE SOUZABijouteriasCOLAR, GARGANTILHA, ARCO, ANEL, PASSADOR DE CA...7.011.838911
1354G.F1.V061BARRACA REGINA GARCIA FERREIRAREGINA GARCIA FERREIRARejane Garcia Ferreira ClementeBijouteriasCOLAR DE METAL, PRESILHA, PASSADOR DE CABELO, ...4.011.827592

1250 rows × 8 columns

#In: 
afonso_pena.get('NUMERO_PRODUTOS_CADASTRADOS')
ID_FEIRA_AFONSO_PENA_BARRACA
83      5.0
84      5.0
85      3.0
86      3.0
87      7.0
       ... 
1350    7.0
1351    3.0
1352    5.0
1353    7.0
1354    4.0
Name: NUMERO_PRODUTOS_CADASTRADOS, Length: 1250, dtype: float64

Digressão: Série

  • Uma Série é como um array, mas com um índice.
  • Em particular, as séries suportam aritmética.
#In: 
afonso_pena.get('NUMERO_PRODUTOS_CADASTRADOS')
ID_FEIRA_AFONSO_PENA_BARRACA
83      5.0
84      5.0
85      3.0
86      3.0
87      7.0
       ... 
1350    7.0
1351    3.0
1352    5.0
1353    7.0
1354    4.0
Name: NUMERO_PRODUTOS_CADASTRADOS, Length: 1250, dtype: float64

Etapa 2 – Calculando o total

  • Assim como acontece com os arrays, podemos realizar operações aritméticas nas séries
#In: 
afonso_pena.get('NUMERO_PRODUTOS_CADASTRADOS').sum()
7457.0
#In: 
afonso_pena.get('NUMERO_PRODUTOS_CADASTRADOS').max()
21.0
#In: 
afonso_pena.get('NUMERO_PRODUTOS_CADASTRADOS').mean()
5.9656

Exemplo 2: Quais feirantes vendem mais produtos?

Conceitos principais: Classificação. Acessando usando posições inteiras.

Etapa 1 – Classificando o DataFrame

  • Use o método .sort_values(by=column_name) para classificar.
  • O by= pode ser omitido, mas ajuda na legibilidade.
  • Como a maioria dos métodos DataFrame, retorna um novo DataFrame.
#In: 
afonso_pena.sort_values(by='NUMERO_PRODUTOS_CADASTRADOS')
CODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREA
ID_FEIRA_AFONSO_PENA_BARRACA
545Y.F1.V027BARRACA NATALICE BARBOSA DA CONCEIÇÃONATALICE BARBOSA DA CONCEIÇÃOWALDIR BARBOSA DA SILVAAlimentaçãoACARAJÉ1.033.611058
1019P.F1.V007BARRACA EVANDRO TADEU DE OLIVEIRAEVANDRO TADEU DE OLIVEIRAJONH WAINE DE ALMEIDA SANTOSArtes e PinturaPINTURA ACRÍLICA1.023.790191
122E.F4.V001BARRACA DORA LÚCIA BATISTA CUNHADORA LÚCIA BATISTA CUNHACRISTINA CUNHA ESPERANCAVestuário InfantilVESTIDO1.011.838911
1331E.F2.V024BARRACA VALERIA JANINE VILELA RIBEIROVALERIA JANINE VILELA RIBEIROAGDA GIOVANNA VILELAVestuário InfantilVESTIDO1.011.827592
387I.F3.V031BARRACA MARIA ANGELICA DOS SANTOS PINTOMARIA ANGELICA DOS SANTOS PINTOPABLO TORQUATO SILVACintos, Bolsas e AcessóriosBOLSA1.011.838911
...........................
653F.F1.V015BARRACA SILVIA REGINA NOGUEIRA RIBEIROSILVIA REGINA NOGUEIRA RIBEIROLIGIA MARIA NOGUEIRA RIBEIROCriançaVESTIDO, BLUSA, CONJUNTO VIROL, CALÇA, COLETE,...20.011.827592
1406Z.F1.V007BARRACA FRANCINERE AMARAL CARDOSO RIBEIRO DE S...FRANCINERE AMARAL CARDOSO RIBEIRO DE SOUZARAYKARD AGUIAR DE JESUSAlimentaçãoCERVEJA, REFRIGERANTE, SUCO INDUSTRIALIZADO, E...20.033.611058
336B.F1.V001BARRACA LUCY DOS SANTOS SEBASTIAOLUCY DOS SANTOS SEBASTIAOLAURO MARTINS DOS SANTOSDecoração e UtilidadesCERÂMICA VITRIFICADA, MOLDURA, VELA, CASTIÇAL,...20.021.193242
491F.F2.V011BARRACA MARILEA IMACULADA MUNIZ COSTAMARILEA IMACULADA MUNIZ COSTAKELLINGTON NONATO MUNIZ COSTACriançaKIT BERÇO, CORTINADO, BONECA DE PELÚCIA, SAIA ...21.011.827592
109Y.F1.V012BARRACA DAYSE PINTO NORBERTODAYSE PINTO NORBERTODJALMA ANTÔNIO DE FREITASAlimentaçãoCERVEJA, TORRESMO, CHIPS, AZEITONA, REFRIGERAN...21.033.611057

1250 rows × 8 columns

Isso classifica, mas em ordem crescente (de pequeno para grande). Queremos o contrário!

Etapa 2 – Classificando o DataFrame em ordem decrescente

  • Use .sort_values(by=column_name, ascending=False) para classificar em ordem decrescente.
  • ascendente é um argumento opcional. Se omitido, será definido como True por padrão.
  • Este é um exemplo de argumento de palavra-chave ou argumento nomeado.
  • Se quisermos especificar a ordem de classificação, devemos usar a palavra-chave ascendente=.
#In: 
ordenado = afonso_pena.sort_values(by='NUMERO_PRODUTOS_CADASTRADOS', ascending=False)
ordenado
CODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREA
ID_FEIRA_AFONSO_PENA_BARRACA
109Y.F1.V012BARRACA DAYSE PINTO NORBERTODAYSE PINTO NORBERTODJALMA ANTÔNIO DE FREITASAlimentaçãoCERVEJA, TORRESMO, CHIPS, AZEITONA, REFRIGERAN...21.033.611057
491F.F2.V011BARRACA MARILEA IMACULADA MUNIZ COSTAMARILEA IMACULADA MUNIZ COSTAKELLINGTON NONATO MUNIZ COSTACriançaKIT BERÇO, CORTINADO, BONECA DE PELÚCIA, SAIA ...21.011.827592
653F.F1.V015BARRACA SILVIA REGINA NOGUEIRA RIBEIROSILVIA REGINA NOGUEIRA RIBEIROLIGIA MARIA NOGUEIRA RIBEIROCriançaVESTIDO, BLUSA, CONJUNTO VIROL, CALÇA, COLETE,...20.011.827592
1406Z.F1.V007BARRACA FRANCINERE AMARAL CARDOSO RIBEIRO DE S...FRANCINERE AMARAL CARDOSO RIBEIRO DE SOUZARAYKARD AGUIAR DE JESUSAlimentaçãoCERVEJA, REFRIGERANTE, SUCO INDUSTRIALIZADO, E...20.033.611058
336B.F1.V001BARRACA LUCY DOS SANTOS SEBASTIAOLUCY DOS SANTOS SEBASTIAOLAURO MARTINS DOS SANTOSDecoração e UtilidadesCERÂMICA VITRIFICADA, MOLDURA, VELA, CASTIÇAL,...20.021.193242
...........................
647P.F1.V023BARRACA SÉRGIO BARBOSA DE JESUSSÉRGIO BARBOSA DE JESUSMARIA ADEMILDE DURAES DOS SANTOSArtes e PinturaPINTURA A ÓLEO1.023.790191
401I.F1.V017BARRACA ROSÂNGELA APARECIDA CALDEIRA DE ALVAR...ROSÂNGELA APARECIDA CALDEIRA DE ALVARENGAELZIM JOSÉ LUIZCintos, Bolsas e AcessóriosBOLSA1.011.838911
811D.F3.V005BARRACA JANE LACERDA FARIAJANE LACERDA FARIAWASHIMGTON GERALDO SILVAVestuárioBLUSA1.011.838911
1022P.F1.V008BARRACA IVETE EMILIA MAGALHÃES SANTOSIVETE EMILIA MAGALHÃES SANTOSLAZARA TEREZA RIZZOArtes e PinturaPINTURA A ÓLEO1.023.790191
1170I.F1.V034BARRACA LUCIENE REIS VASCONCELOSLUCIENE REIS VASCONCELOSELIZETE GENOVEVA DA SILVACintos, Bolsas e AcessóriosBOLSA1.011.827592

1250 rows × 8 columns

Exemplo 3: Criando novas Colunas

Conceitos Principais Entender operações em colunas assim como em vetores

Etapa 1 - Operações aritméticas em colunas

  • Crie uma variável para o número de produtos cadastrados
  • Crie uma outra variável para a área
#In: 
produtos = afonso_pena.get('NUMERO_PRODUTOS_CADASTRADOS')
area = afonso_pena.get('AREA')
  • Assim como em numpy (aula passada), podemos realizar operações aritméticas em colunas pandas.
#In: 
produtos / area
ID_FEIRA_AFONSO_PENA_BARRACA
83      0.422336
84      0.422336
85      0.253402
86      0.253644
87      0.591836
          ...   
1350    0.591271
1351    0.253644
1352    0.422740
1353    0.591271
1354    0.338192
Length: 1250, dtype: float64
  • Observe como a resposta tem a divisão dos produtos pela área, ou seja, a densidade de cada barraca
  • Além do mais, observe como temos também o índice de cada barraca

Etapa 2: Criando uma nova coluna

  • Agora, vamos criar a coluna densidade na nossa base de dados
  • Use .assign(name_of_column=data_in_series) para atribuir uma série (ou array, ou lista) a um DataFrame.
  • ⚠️ Não coloque aspas em name_of_column.
  • Cria um novo DataFrame!
#In: 
afonso_pena.assign(DENSIDADE = produtos / area)
CODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREADENSIDADE
ID_FEIRA_AFONSO_PENA_BARRACA
83F.F2.V016BARRACA CARMEN EMMANUEL DOS SANTOS SILVACARMEN EMMANUEL DOS SANTOS SILVAJANA FONSECA VIEIRACriançaBOLSA DE BEBÊ, MALA DE MATERNIDADE, NECESSÁIRE...5.011.8389110.422336
84G.F3.V052BARRACA CARMEN FERNANDA ROCHA DE ALCANTARACARMEN FERNANDA ROCHA DE ALCANTARAKARINA RODRIGUES BRANDORFIBijouteriasBRINCO, ANEL, PULSEIRA, COLAR, ARCO5.011.8389110.422336
85E.F4.V003BARRACA CARMEN LÚCIA CARVALHO DE ALMEIDACARMEN LÚCIA CARVALHO DE ALMEIDABARBARA ISABELLE CARVALHO DE PAULAVestuário InfantilVESTIDO, CONJUNTO, MACACÃO3.011.8389110.253402
86E.F2.V004BARRACA CECÍLIA PAGANO NEVES SALAZARCECÍLIA PAGANO NEVES SALAZARGISELE PAGANO NEVES SALAZARVestuário InfantilMACACÃO, BLUSA, SAPATINHO3.011.8275920.253644
87D.F2.V016BARRACA CÉLIA APARECIDA DE SOUZACÉLIA APARECIDA DE SOUZAEDSON PIRES DE SOUZAVestuárioBLUSA, BERMUDA, ROUPA DE GINÁSTICA, SAIA, VEST...7.011.8275920.591836
..............................
1350G.F4.V014BARRACA HELCIO LICIO SILVAHELCIO LICIO SILVAGRAZIELA CRISTINA RAMALHO SILVABijouteriasANEL, COLAR, BROCHE, BRINCO, PULSEIRA, ALIANÇA...7.011.8389110.591271
1351J.F1.V004BARRACA DIEGO DOS SANTOS DIASDIEGO DOS SANTOS DIASCELSO DE SOUZA LINHARESCalçadosRASTEIRINHA, SAPATO, SANDÁLIA3.011.8275920.253644
1352D.F4.V050BARRACA JAIR CORREAJAIR CORREAKeli Aparecida Batista CorreaVestuárioVESTIDO DE MALHA, BATA DE TECIDO, CONJUNTO, SA...5.011.8275920.422740
1353G.F2.V010BARRACA SIDNEY FERNANDO KNEIPP SOARESSIDNEY FERNANDO KNEIPP SOARESANA PAULA FAUSTINA DE SOUZABijouteriasCOLAR, GARGANTILHA, ARCO, ANEL, PASSADOR DE CA...7.011.8389110.591271
1354G.F1.V061BARRACA REGINA GARCIA FERREIRAREGINA GARCIA FERREIRARejane Garcia Ferreira ClementeBijouteriasCOLAR DE METAL, PRESILHA, PASSADOR DE CABELO, ...4.011.8275920.338192

1250 rows × 9 columns

  • O código acima cria não altera os dados originais
  • Ainda temos as mesmas colunas de antes
#In: 
afonso_pena.columns
Index(['CODIGO_VAGA', 'NOME_FANTASIA', 'NOME_FEIRANTE', 'NOME_PREPOSTO',
       'NOME_SETOR', 'PRODUTOS', 'NUMERO_PRODUTOS_CADASTRADOS', 'AREA'],
      dtype='object')
  • Porém, podemos criar uma variável
#In: 
afonso_pena = afonso_pena.assign(DENSIDADE = produtos / area)
afonso_pena.get('DENSIDADE')
ID_FEIRA_AFONSO_PENA_BARRACA
83      0.422336
84      0.422336
85      0.253402
86      0.253644
87      0.591836
          ...   
1350    0.591271
1351    0.253644
1352    0.422740
1353    0.591271
1354    0.338192
Name: DENSIDADE, Length: 1250, dtype: float64

Exemplo 3: Agora você responda.

  • Qual a densidade máxima?
  • Qual a densidade mínima?
  • Qual a densidade média?
#In: 
# Suas respostas aqui!

Exemplo 4: A densidade média das barracas de produtos de crianças 👶🧸?

  • Podemos responde a pergunda acima se tivéssemos um DataFrame composto apenas por tais barracas.
  • Como conseguimos esse DataFrame?
#In: 
# Aqui temos os setores
afonso_pena.get('NOME_SETOR')
ID_FEIRA_AFONSO_PENA_BARRACA
83                 Criança
84             Bijouterias
85      Vestuário Infantil
86      Vestuário Infantil
87               Vestuário
               ...        
1350           Bijouterias
1351              Calçados
1352             Vestuário
1353           Bijouterias
1354           Bijouterias
Name: NOME_SETOR, Length: 1250, dtype: object
#In: 
# Quais deles são de crianças
afonso_pena.get('NOME_SETOR') == 'Criança'
ID_FEIRA_AFONSO_PENA_BARRACA
83       True
84      False
85      False
86      False
87      False
        ...  
1350    False
1351    False
1352    False
1353    False
1354    False
Name: NOME_SETOR, Length: 1250, dtype: bool

Use == para verificar a igualdade. Não =, pois é para atribuição de um valor a uma variável.

#In: 
'Criança' == 'Criança'
True
#In: 
'Criança' == 'Adulto'
False

Podemos transmitir a verificação de igualdade para cada elemento de uma Série. A comparação acontece elemento a elemento.

#In: 
afonso_pena.get('NOME_SETOR') == 'Criança'
ID_FEIRA_AFONSO_PENA_BARRACA
83       True
84      False
85      False
86      False
87      False
        ...  
1350    False
1351    False
1352    False
1353    False
1354    False
Name: NOME_SETOR, Length: 1250, dtype: bool

À parte: Booleanos

  • Quando comparamos dois valores, o resultado é True ou False.
  • Observe que essas palavras não estão entre aspas.
  • bool é um tipo de dados em Python, assim como int, float e str.
  • Significa “Boolean”, em homenagem a George Boole, um dos primeiros matemáticos.
  • Existem apenas dois valores booleanos possíveis: True ou False.
  • Sim ou não.
  • Ligado ou desligado.
  • 1 ou 0.

Operadores de comparação

Existem vários tipos de comparações que podemos fazer.

símbolosignificado
==igual a
!=diferente de
<menos que
<=menor ou igual a
>maior que
>=maior ou igual a

Podemos então usar o operador apropriado para ver tudo que é diferente de ‘Criança’ Observe que a resposta é o oposto de antes!

#In: 
afonso_pena.get('NOME_SETOR') != 'Criança'
ID_FEIRA_AFONSO_PENA_BARRACA
83      False
84       True
85       True
86       True
87       True
        ...  
1350     True
1351     True
1352     True
1353     True
1354     True
Name: NOME_SETOR, Length: 1250, dtype: bool

O que é uma consulta? 🤔

  • Uma “consulta” é um código que extrai linhas de um DataFrame para as quais determinadas condições são verdadeiras.
  • Freqüentemente usamos consultas para filtrar DataFrames para que contenham apenas as linhas que satisfaçam as condições declaradas em nossas perguntas.

Como consultamos um DataFrame?

Para selecionar apenas determinadas linhas de solicitações:

  1. Faça uma sequência (lista/matriz/série) de Trues (manter) e Falses (lançar), geralmente fazendo uma comparação.
  2. Em seguida, passe-o para dados[booleanos].
#In: 
afonso_pena[afonso_pena.get('NOME_SETOR') == 'Criança']
CODIGO_VAGANOME_FANTASIANOME_FEIRANTENOME_PREPOSTONOME_SETORPRODUTOSNUMERO_PRODUTOS_CADASTRADOSAREADENSIDADE
ID_FEIRA_AFONSO_PENA_BARRACA
83F.F2.V016BARRACA CARMEN EMMANUEL DOS SANTOS SILVACARMEN EMMANUEL DOS SANTOS SILVAJANA FONSECA VIEIRACriançaBOLSA DE BEBÊ, MALA DE MATERNIDADE, NECESSÁIRE...5.011.8389110.422336
97F.F3.V022BARRACA CLÁUDIA REGINA RACHID NETTOCLÁUDIA REGINA RACHID NETTOHERMOGENES GONÇALVES NETTOCriançaSACOLA, MOISÉS, FRASQUEIRA, MALA, NECESSÁIRE5.011.8389110.422336
99F.F2.V002BARRACA CLESIA LUCI TORRES DE OLIVEIRACLESIA LUCI TORRES DE OLIVEIRAANA CAROLINE SILVA MATOZINHOSCriançaBONECO, MÓBILE, BICHO DE PANO3.011.8389110.253402
108F.F1.V031BARRACA DAISY ANDRADEDAISY ANDRADEMARCIO MARTINSCriançaPAGÃO, CABIDE2.011.8275920.169096
114F.F2.V013BARRACA DIRLENE VILELA ROMÃODIRLENE VILELA ROMÃOMICHELLE VILELA COSTACriançaEDREDON, MANTA, CAPA DE CARRINHO, CORTINADO DE...7.011.8275920.591836
..............................
1411F.F3.V013BARRACA ROSANA DANIEL DE FIGUEIREDOROSANA DANIEL DE FIGUEIREDOMARIA DO ROSARIO SILVA SALGADOCriançaKIT BERÇO, MANTA, PROTETOR DE BERÇO, CAPA DE C...10.011.8275920.845481
1467F.F1.V005BARRACA LYDNEIA MELISSA TEIXEIRALYDNEIA MELISSA TEIXEIRALYDSSEI MELISSA TEIXEIRA FERREIRACriançaKIT BERÇO, SAIA PARA BERÇO, NINHO, LENÇOL, ALM...8.011.8275920.676384
1468F.F4.V014BARRACA PAULA GUERRA IGLESIAS RODRIGUESPAULA GUERRA IGLESIAS RODRIGUESGREG PETERSON LOPES PERUZZOCriançaBONECA DE PANO, BONECA DE FELTRO, BONECO, DEDO...5.011.8389110.422336
1426F.F3.V010BARRACA ALESSANDRA DE ABREU REISALESSANDRA DE ABREU REISGLAUCIA HELENA DE ABREU TAVARESCriançaACESSÓRIOS PARA CACHORRO, ALMOFADA, CAMA DE TE...14.011.8389111.182541
1337F.F2.V004BARRACA MATHEUS PESSALI TIAGO BARBOSAMATHEUS PESSALI TIAGO BARBOSAMIRNA COSTA GONÇALVESCriançaQUADRO, TOALHA FRALDA, TOALHA, BRINQUEDO PEDAG...6.011.8389110.506803

103 rows × 9 columns

Voltando para a pergunta: A densidade média das barracas de produtos de crianças 👶🧸?

  • Filtre um novo DataFrame apenas de crianças
  • Pegue a coluna desejada
  • Tire a média
#In: 
criancas = afonso_pena[afonso_pena.get('NOME_SETOR') == 'Criança']
criancas.get('DENSIDADE')
ID_FEIRA_AFONSO_PENA_BARRACA
83      0.422336
97      0.422336
99      0.253402
108     0.169096
114     0.591836
          ...   
1411    0.845481
1467    0.676384
1468    0.422336
1426    1.182541
1337    0.506803
Name: DENSIDADE, Length: 103, dtype: float64
#In: 
criancas.get('DENSIDADE').mean()
0.6106923564685903

E se forem comidas? 🍓 🍒 🍎 🍉 🍑 🍊 🥭 🍍 🍌 🍋 🍈 🍏 🍐 🥝 🍇 🥥 🍅 🌶 🍄 🥕 🍠 🧅 🌽 🥦 🥒🥬 🥑 🍆 🧄 🥔 🌰🥜

#In: 
comidas = afonso_pena[afonso_pena.get('NOME_SETOR') == 'Alimentação']
comidas.get('DENSIDADE').mean()
0.218202423788409

Como explicar o resultado acima?

  • Será que a coluna área ajuda?
#In: 
comidas.get('AREA').mean()
33.593432833729956
#In: 
criancas.get('AREA').mean()
12.378615690707454

Parece que as barracas de comida tem muita espaço. Isso é esperado, elas precisam cozinhar.

Resumo

Resumo

  • Aprendemos alguns métodos e técnicas do DataFrame.
  • Não sinta necessidade de memorizá-los todos imediatamente.
  • Com o tempo, essas técnicas se tornarão cada vez mais familiares.
  • Pratique! Elabore suas próprias perguntas usando este conjunto de dados e tente respondê-las.

Próxima vez

  • Responderemos a perguntas mais complicadas, que nos levarão a um novo método principal do DataFrame, .groupby, para organizar linhas de um DataFrame com o mesmo valor em uma coluna específica.
  • Por exemplo, podemos querer organizar os dados por bairro, recolhendo todos os diferentes pedidos de serviço para cada bairro.
#In: