Aprenda Pandas

  • Página Inicial
  • Contato!
  • Tudo sobre Pandas Parte 1!
  • Tudo sobre Pandas Parte 2!
  • Tudo sobre Pandas Parte 2

    Comando Loc para Dataframes MultiIndex

    Podemos usar o loc dessa forma também, para pegar múltiplos índices (no caso, dois) de uma coluna:

    
    print(dfNotif.loc[("Brazil", "12/14/20"), :])
    
    

    Para pegar todas as datas atribuídas ao Brasil:

    
    print(dfNotif.loc["Brazil", :])
    
    

    Caso queira pegar mais de um país:

    
    print(dfNotif.loc[(("Brazil", "US"), "12/14/20"), :])
    
    

    E também mais de uma data:

    
    print(dfNotif.loc[(("Brazil", "US"), ("12/14/20", "12/14/21")), :])
    
    

    E um intervalo de datas:

    
    print(dfNotif.loc[("Brazil", "12/14/20") : ("Brazil", "12/14/21")])
    
    

    Comando reset_index

    Para a gente voltar pros índices anteriores, podemos fazer assim:

    
    print(dfNotif.reset_index())    
    
    

    Esse comando acima reseta tudo que foi feito no código.

    Podemos resetar por level (coluna), por exemplo, contando a partir do 0:

    
    print(dfNotif.reset_index(level = 0))
    
    

    E com o 1:

    
    print(dfNotif.reset_index(level = 1))
    
    

    Para ver os tipos dos dados resetados:

    
    dfNotif.reset_index(inplace = True)
    
    print(dfNotif.dtypes)
    
    

    Só que veja que datas é identificado como object, ele deveria ser identificado como datetime. Para converter, faça assim:

    
    dfNotif["Datas"] = pd.to_datetime(dfNotif["Datas"], format = "%m/%d/%y")
    
    print(dfNotif.dtypes)
    
    

    Depois, é só retirar o dtypes e mostrar o print puro, assim:

    
    print(dfNotif)
    
    

    Comando Pivot

    Para transformar o dado para que possamos utilizar, podemos usar o método pivot.

    No caso, podemos fazer de uma coluna um novo index, por exemplo, entre outras coisas. É uma forma de estruturar as colunas.

    Vamos fazer assim:

    
    print(dfNotif.pivot(index = "Datas", columns = "País/Região", values = "Notificações"))
    
    

    No caso acima, as datas vão ser os índices e cada país será uma coluna.

    E para definir um plot:

    
    dfNotif = dfNotif.pivot(index = "Datas", columns = "País/Região", values = "Notificações")
    
    print(dfNotif.plot(y = "Brazil", use_index = True, grid = True, figsize = (12, 8)))
    
    plt.show() # Coloque import matplotlib.pyplot as plt
    
    

    PS: Instale a biblioteca matplotlib antes e importe ela. Ela é pra gerar gráficos.

    Com uma lista de países:

    
    dfNotif.plot(y = ["Brazil", "US", "Italy", "China"], use_index = True, grid = True, figsize = (12, 8))
    
    plt.show() # Coloque import matplotlib.pyplot as plt
    
    

    Resumo

    Resumidamente, o que fizemos inicialmente foi isso:

    
    import pandas as pd
    
    link = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/refs/heads/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
    
    dfNotif = pd.read_csv(link)
    
    dfNotif.drop(["Lat", "Long"], axis = 1, inplace = True)
    
    print(dfNotif)
    
    

    Agrupando somando:

    
    dfNotif = dfNotif.groupby(by = ["Country/Region"]).sum()
    
    print(dfNotif)
    
    

    Invertendo linhas e colunas com a opção T (não apague o groupby):

    
    dfNotif = dfNotif.T
    
    print(dfNotif)
    
    

    Personalizando nome de uma das colunas (não apague os códigos anteriores):

    
    dfNotif.index.set_names("Datas", inplace = True)
    
    print(dfNotif)
    
    

    Exibindo os índices:

    
    print(dfNotif.index)
    
    

    Comando Merge

    Defina essas linhas no código, no lugar do print dfNotif (não apague as outras configurações do mesmo):

    
    link = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/refs/heads/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv"
    
    dfDeaths = pd.read_csv(link)
    
    dfDeaths.drop(["Lat", "Long"], axis = 1, inplace = True)
    
    dfDeaths = dfDeaths.groupby(by = ["Country/Region"]).sum()
    
    dfDeaths = dfDeaths.T
    
    dfDeaths.index.set_names("Datas", inplace = True)
    
    print(dfDeaths)
    
    

    E no lugar do último print acima:

    
    dfDeaths.plot(y = ["Brazil", "US", "Italy", "China"], use_index = True, grid = True, figsize = (12, 8), logy = True)
    
    plt.show() # Coloque import matplotlib.pyplot as plt
    
    

    O merge, basicamente, ele funde dois dataframes em apenas um só. No caso, colocaremos o notifications na esquerda e o deaths na direita.

    Faça assim no final do código, antes do plot:

    
    dfNotif.merge(dfDeaths, on = "Datas", how = "left", sort = True)
    
    

    No lugar do plot e do plt, abaixo do merge:

    
    brNotif = dfNotif[["Brazil"]]
    
    brNotif.columns = ["Notifications"]
    
    print(brNotif)
    
    

    O mesmo com o deaths:

    
    brDeaths = dfDeaths[["Brazil"]]
    
    brDeaths.columns = ["Deaths"]
    
    print(brDeaths)
    
    

    E ao fundir, deixe apenas esse print, tirando o merge anterior pra não dar conflitos:

    
    brNotif.merge(brDeaths, on = "Datas", how = "left", sort = True)
    
    print(brNotif)
    
    

    Fazendo o fatiamento, retirando os dois primeiros índices de brNotif e os dois últimos de brDeaths, no lugar do merge anterior:

    
    brNotif.iloc[2:, :].merge(brDeaths.iloc[:-2, :], on = "Datas", how = "left", sort = True)
    
    print(brNotif)
    
    

    Isso é pra remover as ocorrencias com NaN.

    Troque o left de merge por right. Pra ele não privilegiar nem o da direita nem o da esquerda, fazendo uma junção geral, coloque outer.