sábado, 24 de abril de 2021

Python - Utilizando o método Series.cummax() para encontrar o máximo cumulativo de uma série

O método Series.cummax() do pandas é usado para encontrar o máximo cumulativo de uma série. No máximo cumulativo, o comprimento da série retornada é o mesmo da série de entrada e cada elemento é igual ao maior entre o elemento atual e o elemento anterior.

Sintaxe: Series.cummax(axis=None, skipna=True)

Parâmetros:

  • axis: 0 ou 'index' para operação em linha e 1 ou 'columns' para operação em coluna.
  • skipna: Ignora a adição de NaN para elementos após o próximo definido como True.

Tipo de retorno: Series

Exemplo #1: Neste exemplo, uma série é criada a partir de uma lista python. A lista também contém um valor Nulo e o parâmetro skipna é mantido como padrão, ou seja, True.

# importa o módulo pandas
import pandas as pd

# importa o módulo numpy
import numpy as np 

# criando uma lista de valores
values = [3, 4, np.nan, 7, 2, 0] 

# criando uma serie a partir de uma lista
series = pd.Series(values) 

# chamando o método cummax
cummax = series.cummax() 

# mostrando o resultado
print(cummax)

Saída:

0    3.0
1    4.0
2    NaN
3    7.0
4    7.0
5    7.0
dtype: float64

Explicação: Series.cummax() é a comparação do valor atual com o valor anterior. O primeiro elemento é sempre igual ao primeiro da série do chamador.

3
4  (4>3)
NaN (Não pode ser comparados com valores inteiros)
7  (7>4)
7  (7>2)
7  (7>0)

Exemplo #2: skipna=False. Neste exemplo, uma série é criada como no exemplo acima. Mas o parâmetro skipna é mantido como False. Portanto, os valores NULL não serão ignorados e serão comparados sempre que ocorrer.

# importa o módulo pandas
import pandas as pd

# importa o módulo numpy
import numpy as np 

# criando uma lista de valores
values = [9, 4, 33, np.nan, 0, 1, 76, 5]

# criando uma serie a partir de uma lista
series = pd.Series(values) 

# chamando o método cummax
cummax = series.cummax(skipna=False) 

# mostrando o resultado
print(cummax)

Saída:

0     9.0
1     9.0
2    33.0
3     NaN
4     NaN
5     NaN
6     NaN
7     NaN
dtype: float64

Explicação: Assim como no exemplo acima, o máximo dos valores atuais e anteriores foram armazenados em todas as posições até que NaN ocorresse. Uma vez que NaN comparado com qualquer coisa retorna NaN e o parâmetro skipna é mantido como False, o máximo cumulativo após sua ocorrência é NaN devido à comparação de todos os valores com NaN.

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas series.cummax() to find Cumulative maximum of a series.

Licença

quinta-feira, 22 de abril de 2021

Python - Altere os nomes das colunas e os índices das linhas no DataFrame pandas

Dado um DataFrame pandas, vamos ver como alterar seus nomes de coluna e índices de linha.

Sobre o DataFrame pandas

Os DataFrame pandas são grades retangulares usadas para armazenar dados. É fácil visualizar e trabalhar com dados quando armazenados em dataFrame.

  • Consiste em linhas e colunas.
  • Cada linha é uma medida de alguma instância, enquanto a coluna é um vetor que contém dados para algum atributo/variável específico.
  • Cada coluna de dataframe tem dados homogêneos em qualquer coluna específica, mas as linhas de dataframe podem conter dados homogêneos ou heterogêneos em qualquer linha específica.
  • Ao contrário da matriz bidimensional, os eixos do dataframe do pandas são rotulados.

O tipo Dataframe do Pandas tem dois atributos chamados "columns" e "index" que podem ser usados para alterar os nomes das colunas, bem como os índices das linhas.

Crie um DataFrame usando um dicionário.

import pandas as pd

df = pd.DataFrame({
    "Nome": ['Tom', 'Nick', 'John', 'Peter'],
    "Idade": [15, 26, 17, 28]
})

print(df)

Saída:

    Nome  Idade
0    Tom     15
1   Nick     26
2   John     17
3  Peter     28

Método #1: Alterar o nome da coluna e o índice da linha usando os atributo df.columns e df.index respectivamente.

Para alterar os nomes das colunas, fornecemos uma lista python contendo os nomes das colunasparra o atributo df.columns. Exemplo: df.columns = ['First_col', 'Second_col', 'Third_col', .....].

Para alterar os índices de linha, também fornecemos uma lista python para o atributo df.index. Exemplo: df.index = ['row1', 'row2', 'row3', ......]

import pandas as pd

df = pd.DataFrame({
    "Nome": ['Tom', 'Nick', 'John', 'Peter'],
    "Idade": [15, 26, 17, 28]
})

# Muda o nome das colunas
df.columns = ['Coluna_1', 'Coluna_2']

# Muda o nome dos index
df.index = ['Lina_1', 'Linha_2', 'Linha_3', 'Linha_4']

print(df)

Saída:

        Coluna_1  Coluna_2
Lina_1       Tom        15
Linha_2     Nick        26
Linha_3     John        17
Linha_4    Peter        28

Método #2: Usando a função rename() com dicionário para alterar uma única coluna

import pandas as pd

df = pd.DataFrame({
    "Nome": ['Tom', 'Nick', 'John', 'Peter'],
    "Idade": [15, 26, 17, 28]
})

# Alterar o nome da coluna 'Nome' para 'Coluna_1'
df = df.rename(columns={"Nome":"Coluna_1"})

print(df)

Saída:

  Coluna_1  Idade
0      Tom     15
1     Nick     26
2     John     17
3    Peter     28

Alterar vários nomes de coluna simultaneamente:

import pandas as pd

df = pd.DataFrame({
    "Nome": ['Tom', 'Nick', 'John', 'Peter'],
    "Idade": [15, 26, 17, 28]
})

# Alterar o nome da coluna 'Nome' para 'Coluna_1'
# e alterando o nome da coluna 'Idade' para 'Coluna_2'
df = df.rename({"Nome":"Coluna_1","Idade":"Coluna_2"}, axis='columns')

print(df)

Saída:

  Coluna_1  Coluna_2
0      Tom        15
1     Nick        26
2     John        17
3    Peter        28

Método #3: Usando a função Lambda para renomear as colunas.

Uma função lambda é uma pequena função anônima que pode receber qualquer número de argumentos, mas pode ter apenas uma expressão. Usando a função lambda, podemos modificar todos os nomes das colunas de uma vez. Vamos adicionar 'x' no final de cada nome de coluna usando a função lambda

import pandas as pd

df = pd.DataFrame({
    "Nome": ['Tom', 'Nick', 'John', 'Peter'],
    "Idade": [15, 26, 17, 28]
})

# Renomeando colunas usando uma função lambda
# Adiciona '_x' ao final do nome de cada coluna
df = df.rename(columns=lambda x: x+'_x')

print(df)

Saída:

   Nome_x  Idade_x
0    Tom      15
1   Nick      26
2   John      17
3  Peter      28

Método #4: Usando o atributo values para renomear as colunas.

Podemos usar o atributo values diretamente na coluna cujo nome queremos alterar.

import pandas as pd

df = pd.DataFrame({
    "Nome": ['Tom', 'Nick', 'John', 'Peter'],
    "Idade": [15, 26, 17, 28]
})

df.columns.values[1] = 'Estudantes_Idade'

print(df)

Saída:

    Nome  Estudantes_Idade
0    Tom                15
1   Nick                26
2   John                17
3  Peter                28

Vamos mudar o índice da linha usando a função Lambda.

import pandas as pd

df = pd.DataFrame({
    "A": ['Tom', 'Nick', 'John', 'Peter'],
    "B": [25, 16, 27, 18]
})

# isto aumentará o valor do índice da linha em 10 para cada linha
df = df.rename(index=lambda x: x + 10)

print(df)

Saída:

        A   B
10    Tom  25
11   Nick  16
12   John  27
13  Peter  18

Agora, se quisermos alterar os índices de linha e nomes de coluna simultaneamente, isso pode ser feito usando a função rename() e passando o atributo de coluna e índice como o parâmetro.

import pandas as pd

df = pd.DataFrame({
    "A": ['Tom', 'Nick', 'John', 'Peter'],
    "B": [25, 16, 27, 18]
})

df = df.rename(index=lambda x: x + 5, columns=lambda x: x + 'x')

print(df)

Saída:

import pandas as pd

df = pd.DataFrame({
    "A": ['Tom', 'Nick', 'John', 'Peter'],
    "B": [25, 16, 27, 18]
})

df = df.rename(index=lambda x: x + 5, columns=lambda x: x + 'x')

print(df)

Artigo escrito por Shubham__Ranjan e traduzido por Acervolima de Python | Change column names and row indexes in Pandas DataFrame.

Licença

Diferentes maneiras de criar um DataFrame pandas

DataFrame pandas é uma estrutura de dados rotulada bidimensional com colunas de tipos potencialmente diferentes. Geralmente é o objeto pandas mais comumente usado.

O DataFrame pandas pode ser criado de várias maneiras. Vamos discutir diferentes maneiras de criar um DataFrame, uma por uma.

Método #1: Criando Pandas DataFrame a partir de listas de listas.

# importando a biblioteca pandas
import pandas as pd

# inicializando uma lista com listas
data = [['tom', 10], ['nick', 15], ['juli', 14]]

# Criando um dataframe do pandas
df = pd.DataFrame(data, columns=['Nome', 'Idade'])

# mostrando o dataframe
print(df)

Saída:

   Nome  Idade
0   tom     10
1  nick     15
2  juli     14

Método #2: Criando DataFrame de um dicionário de narray/listas

Para criar DataFrame a partir de um dicionário de narray/listas, todos os narray devem ter o mesmo comprimento. Se o índice for passado, o índice de comprimento deve ser igual ao comprimento das matrizes. Se nenhum índice for passado, então, por padrão, o índice será o intervalo (n), onde n é o comprimento do array.

# importando a biblioteca pandas
import pandas as pd

dicionário = {
    'Nome': ['Tom', 'nick', 'krish', 'jack'],
    'Idade': [20, 21, 19, 18]
}

# Criando um dataframe a partir de um dicionário do python
df = pd.DataFrame(dicionário)

# mostrando o dataframe
print(df)

Saída:

    Nome  Idade
0    Tom     20
1   nick     21
2  krish     19
3   jack     18

Método #3: Cria um DataFrame de índices usando matrizes.

# importando a biblioteca pandas
import pandas as pd

# Inicializando um dicionário com arrays
data = {
    'Name': ['Tom', 'Jack', 'nick', 'juli'],
    'marks': [99, 98, 95, 90]
}

# criando um dataframe com index
df = pd.DataFrame(data, index=['rank1','rank2', 'rank3', 'rank4'])

# mostrando o dataframe
print(df)

Saída:

       Name  marks
rank1   Tom     99
rank2  Jack     98
rank3  nick     95
rank4  juli     90

Método #4: Criando Dataframe a partir de uma lista de dicionários

O DataFrame pandas pode ser criado passando listas de dicionários como dados de entrada. Por padrão, as chaves do dicionário são consideradas colunas.

# importando a biblioteca pandas
import pandas as pd

# inicializando uma lista com dicionários
data = [
    {'a': 1, 'b': 2, 'c':3},
    {'a':10, 'b': 20, 'c': 30}
]

# criando um dataframe
df = pd.DataFrame(data)

# mostrando o dataframe
print(df)

Saída:

    a   b   c
0   1   2   3
1  10  20  30

Outro exemplo para criar o DataFrame do pandas passando listas de dicionários e índices de linha.

# importando a biblioteca pandas
import pandas as pd

# inicializando uma lista com dicionários
data = [
    {'b': 2, 'c':3},
    {'a':10, 'b': 20, 'c': 30}
]

# criando um dataframe com index
df = pd.DataFrame(data, index=['primeiro', 'segundo'])

# mostrando o dataframe
print(df)

Saída:

           b   c     a
primeiro   2   3   NaN
segundo   20  30  10.0

Outro exemplo para criar o DataFrame do pandas a partir de listas de dicionários com índice de linha e índice de coluna.

import pandas as pd

data = [
    {'a': 1, 'b': 2},
    {'a': 5, 'b': 10, 'c': 20}
]
   
# Com dois índices de coluna, valores iguais às chaves de dicionário
df1 = pd.DataFrame(
    data,
    index=['first', 'second'],
    columns=['a', 'b']
)
   
# Com dois índices de coluna com um índice com outro nome
df2 = pd.DataFrame(
    data,
    index=['first', 'second'],
    columns=['a', 'b1']
)

# Mostra o primeiro dataframe
print (df1, "\n")

# Mostra o segundo dataframe
print (df2)

Saída:

        a   b
first   1   2
second  5  10 

        a  b1
first   1 NaN
second  5 NaN

Método #5: Criando DataFrame usando a função zip().

Duas listas podem ser mescladas usando a função list(zip()). Agora, crie o DataFrame do pandas chamando a função pd.DataFrame().

import pandas as pd 

Nome = ['tom', 'krish', 'nick', 'juli'] 

Idade = [25, 30, 26, 22] 

# obtenha a lista de tuplas de duas listas e mescle-as usando zip().
lista_de_tuplas = list(zip(Nome, Idade))  

# Convertendo listas de tuplas em Dataframe do pandas.
df = pd.DataFrame(
    lista_de_tuplas,
    columns=['Nome', 'Idade']
)

print(df)

Saída:

    Nome  Idade
0    tom     25
1  krish     30
2   nick     26
3   juli     22

Método #6: Criando DataFrame a partir de um cicionário de série.

Para criar DataFrame a partir de dicionários de série, o dicionário pode ser passado para formar um DataFrame. O índice resultante é a união de todas as séries de index passadas.

import pandas as pd 

d = {
    'one': pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd']),
    'two' : pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
}

# Criando dataframe
df = pd.DataFrame(d)

print(df)

Saída:

   one  two
a   10   10
b   20   20
c   30   30
d   40   40

Artigo escrito por Samdare B e traduzido por Acervolima de Different ways to create Pandas Dataframe.

Licença

Crie DataFrames do pandas a partir de listas usando a função zip do python

Uma das maneiras de criar DataFrame do pandas é usando a função zip().

Você pode usar as listas para criar listas de tuplas e criar um dicionário a partir delas. Então, este dicionário pode ser usado para construir um dataframe.

A função zip() cria os objetos e pode ser usada para produzir um único item por vez. Esta função pode criar DataFrames pandas mesclando duas listas.

Suponha que haja duas listas de dados de alunos, a primeira lista contém o nome do aluno e a segunda lista a idade do aluno. Então podemos ter,

Nome = ['tom', 'krish', 'nick', 'juli']

Idade = [25, 30, 26, 22]

As duas listas acima podem ser mescladas usando a função list(zip()). Agora, crie o DataFrame do pandas chamando a função pandas.DataFrame().

import pandas as pd

Nome = ['tom', 'krish', 'nick', 'juli']

Idade = [25, 30, 26, 22]

# obtenha a lista de tuplas de duas listas
# e mescle-as usando zip().
lista_de_tuplas = list(zip(Nome, Idade))

print(lista_de_tuplas)

Saída:

[('tom', 25), ('krish', 30), ('nick', 26), ('juli', 22)]
import pandas as pd

Nome = ['tom', 'krish', 'nick', 'juli']

Idade = [25, 30, 26, 22]

# obtenha a lista de tuplas de duas listas
# e mescle-as usando zip().
lista_de_tuplas = list(zip(Nome, Idade))

# converte uma lista de tuplas num DataFrame
df = pd.DataFrame(lista_de_tuplas, columns=['Nome', 'Idade'])

print(df)

Saída:

    Nome  Idade
0    tom     25
1  krish     30
2   nick     26
3   juli     22

Artigo escrito por Samdare B e traduzido por Acervolima de Create pandas dataframe from lists using zip.

Licença

Python - Series.cumsum() para encontrar a soma cumulativa de uma série do pandas

O método Series.cumsum() do pandas é usado para encontrar a soma cumulativa de uma série. Na soma cumulativa, o comprimento da série retornada é igual à entrada e cada elemento é igual à soma de todos os elementos anteriores.

Sintaxe: Series.cumsum(axis=None, skipna=True)

Parâmetros:

  • axis: 0 ou 'índice' para operação em linha e 1 ou 'colunas' para operação em coluna.
  • skipna: Ignora a adição de NaN para elementos após o próximo se True.

Tipo de retorno: Series

Exemplo #1: Neste exemplo, uma série é criada a partir de uma lista python usando o método pandas.Series(). A lista também contém um valor Nulo e o parâmetro skipna é mantido como padrão, ou seja, True.

# importando o módulo pandas
import pandas as pd

# importando o módulo numpy
import numpy as np

# criando uma lista de valores
values = [3, 4, np.nan, 7, 2, 0]

# Criando uma Series a partir de uma lista
series = pd.Series(values)

# chamando o método cumsum
cumsum = series.cumsum()

# imprimindo o resultado da chamada da função cumsum
print(cumsum)

Saída:

0     3.0     
1     7.0     
2     NaN     
3    14.0     
4    16.0     
5    16.0     
dtype: float64

Explicação: A soma cumulativa é a soma dos valores atuais e de todos os valores anteriores. Conforme mostrado na saída acima, a adição foi feita da seguinte forma:

3
3+4 = 7
7+NaN = NaN
7+7 = 14
14+2 = 16
16+0 = 16

Exemplo #2: skipna=False. Neste exemplo, uma série é criada como no exemplo acima. Mas o parâmetro skipna é mantido como False. Portanto, os valores NULL não serão ignorados e serão adicionados todas as vezes após sua ocorrência.

# importando o módulo pandas
import pandas as pd

# importando o módulo numpy
import numpy as np

# criando uma lista de valores
values = [3, 4, np.nan, 7, 2, 0]

# Criando uma Series a partir de uma lista
series = pd.Series(values)

# chamando o método cumsum
cumsum = series.cumsum(skipna=False)

# imprimindo o resultado da chamada da função cumsum
print(cumsum)

Saída:

0    3.0
1    7.0
2    NaN
3    NaN
4    NaN
5    NaN
dtype: float64

Explicação: Como pode ser visto na saída, todos os valores após a primeira ocorrência de NaN também são NaN, pois qualquer número + NaN também é NaN.

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas Series.cumsum() to find cumulative sum of a Series.

Licença

Python - Utilizando o método Series.cov() para encontrar a covariância

O método Series.cov() do pandas é usado para encontrar a covariância de duas séries. No exemplo a seguir, a covariância é encontrada usando o método do pandas e manualmente e as respostas são comparadas.

Sintaxe: Series.cov(other, min_periods=None)

Parâmetros:

  • other: Outra série a ser usada para encontrar covariância.
  • min_periods: Número mínimo de observações a serem feitas para obter um resultado válido.

Tipo de retorno: Valor flutuante, retorna a covariância da série do autor da chamada e da série passada.

Exemplo: Neste exemplo, duas listas são feitas e convertidas em série usando o método pandas.Series(). A média se ambas as séries forem encontradas e uma função for criada para encontrar Covarience manualmente. pandas.cov() também é aplicado e os resultados de ambas as formas são armazenados em variáveis e impressos para comparar as saídas.

import pandas as pd

a = [2, 3, 2.7, 3.2, 4.1]

b = [10, 14, 12, 15, 20]

# armazenando média de a
av_a = sum(a)/len(a)

# armazenando média de b
av_b = sum(b)/len(b)

# fazendo série da lista a
a = pd.Series(a)

# fazendo série da lista b
b = pd.Series(b)

# covariância através do método do pandas
covar = a.cov(b)

# encontrar covariância manualmente
def covarfn(a, b, av_a, av_b):
    cov = 0

    for i in range(0, len(a)):
        cov += (a[i] - av_a) * (b[i] - av_b)
    return (cov / (len(a)-1))

# chamando função
cov = covarfn(a, b, av_a, av_b)

# imprimindo resultado
print("Resultados do método do pandas: ", covar)
print("Resultados do método de função manual: ", cov)

Como pode ser visto na saída, a saída de ambas as formas é a mesma. Portanto, este método é útil para encontrar a covariância para grandes séries.

Saída:

Resultados do método do pandas:  2.8499999999999996
Resultados do método de função manual:  2.8499999999999996

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas Series.cov() to find Covariance.

Licença

terça-feira, 20 de abril de 2021

Python - Utilizando o método astype() para converter o tipo de dados de uma Series pandas

O método astype() do pandas é um dos métodos mais importantes. É usado para alterar o tipo de dados de uma série. Quando o DataFrame é feito de um arquivo csv, as colunas são importadas e o tipo de dados é definido automaticamente, o que muitas vezes não é o que deveria. Por exemplo, uma coluna de salário pode ser importada como string, mas para fazer as operações temos que convertê-la em float.

astype() é usado para fazer tais conversões de tipo de dados.

Sintaxe: DataFrame.astype(dtype, copy=True, errors=’raise’)

Parâmetros:

  • dtype: Tipo de dados para o qual converter a série. (por exemplo str, float, int)
  • copy: Faz uma cópia do dataframe/série.
  • errors: Erro ao aumentar a conversão para tipo de dados inválido. Por exemplo, dict to string. 'raise' aumentará o erro e 'ignore' passará sem aumentar o erro.

Tipo de retorno: Series com os tipos de dados alterados.

Para baixar o conjunto de dados usado no exemplo a seguir, clique aqui.

Nos exemplos a seguir, o DataFrame usado contém dados de alguns jogadores da NBA. A imagem do DataFrame antes de qualquer operação é anexada abaixo.

Exemplo: Neste exemplo, o DataFrame é importado e .dtypes é chamado no DataFrame para visualizar os tipos de dados das séries. Depois disso, algumas colunas são convertidas usando o método .astype() e os dtypes são exibidos novamente para ver as mudanças.

# importa o modulo pandas
import pandas as pd

# Criar um DataFrame a partir de um arquivo csv
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")

# Descarta valores null para evitar erros
data.dropna(inplace = True)

# Guardando dtype antes de converter
before = data.dtypes

# Convertendo dtype para inteiro
data["Salary"] = data["Salary"].astype(int)
# Convertendo dtype para string
data["Number"] = data["Number"].astype(str)

# Guardando dtype depois de converter
after = data.dtypes

# imprimindo o antes e depois da converção
print("Depois da converção\n", before, "\n")
print("Antes da converção\n", after, "\n")

Conforme mostrado na saída abaixo, os tipos de dados das colunas foram convertidos de acordo.

Depois da converção
 Name         object
Team         object
Number      float64
Position     object
Age         float64
Height       object
Weight      float64
College      object
Salary      float64
dtype: object 

Antes da converção
 Name         object
Team         object
Number       object
Position     object
Age         float64
Height       object
Weight      float64
College      object
Salary        int64
dtype: object

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas Series.astype() to convert Data type of series.

Licença