Pandas
Carregando, aguarde alguns segundos.

3 - DataFrame

Os DataFrames são estruturas de dados tabulares bidimensionais, com tamanho considerável e potencialmente heterogêneos.

A estrutura de dados contém eixos rotulados com linhas e colunas e operações aritméticas alinhadas nos rótulos.

Pode ser pensado como um contêiner para os objetos das séries.

É a estrutura primária da biblioteca de dados do Pandas.

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)

Parâmetros:

  • data: ndarray ( estruturado ou homogêneo), Iterável, dict ou dataframe O dicionário pode conter séries, matrizes, constantes, classe de dados ou objetos semelhantes a listas. Se os dados são um ditado, a ordem das colunas segue a ordem de inserção. Se um ditado contiver Série que possui um índice definido, ele é alinhado pelo seu índice. Esse alinhamento também ocorre se os dados forem uma série ou um próprio dataframe O alinhamento é feito em Entradas de série / dataframe Se os dados são uma lista de ditos, a ordem das colunas segue a ordem de inserção.
  • index: Índice a ser usado para o quadro resultante. O padrão será RangeIndex se nenhuma informação de indexação faz parte dos dados de entrada e nenhum índice é fornecido.
  • columns: Índice ou tipo-array. Nome de colunas, opcional. Se Nenhum, o padrão foi usado como o nome das colunas. Se uma lista de nomes de colunas for fornecida, o padrão será o nome das colunas. Etiquetas de colunas a serem usadas para o quadro resultante quando os dados não os tiverem, inadimplente no RangeIndex ( 0, 1, 2, ..., n). Se os dados contiverem rótulos de colunas, executará a seleção da coluna.
  • dtype: dtype, padrão None. Tipo de dados para forçar. Apenas um único dtype é permitido. Se nenhum, inferir.
  • copy: bool ou nenhum, padrão Nenhum. Copie dados de entradas. Para dados de dict, o padrão de None se comporta como copy=True. Para DataFrame ou entrada 2d ndarray, o padrão de None se comporta como copy=False. Se os dados são um dicionário contendo uma ou mais séries (possivelmente de diferentes tipos), copy=False garantirá que essas entradas não sejam copiadas.

Importamos as bibliotecas:

import pandas as pd
import numpy as np

Criamos os dataframes usados nos exemplos.

Dataframe de pessoas df_pessoas:

df_pessoas = pd.DataFrame({
  'Nome'    : ['Roberto', 'Rosana', 'Pedro', 'Dora'],
  'Idade'   : [25, 30, 35, 40],
  'Altura'  : [165, 180, 175, 185],
  'Sexo'    : ['M', 'F', 'M', 'F'],
  'Peso'    : [65, 70, 75, 80],
  'IMC'     : [22.2, 23.4, 25.6, 27.8],
  'Salario' : [2500, 3000, 3500, 4000]
})

Dataframe de cidades df_cidades:

df_cidades = pd.DataFrame({
    'Cidade'  : ['Belo Horizonte', 'São Paulo', 'Rio de Janeiro', 'Salvador'],
    'Bairros' : [['Sion', 'Pampulha'], ['Morumbi', 'Liberdade'], ['Leblon', 'Copacabana'], ['Pelourinho', 'Liberdade']],
    'Mês'     : ['Janeiro', 'Fevereiro', 'Janeiro', 'Fevereiro'],
    'Vendas'  : [100, 150, 90, 120]
})

3.1 - Construtor

A classe pandas.DataFrame é uma estrutura de dados tabulares bidimensional com rótulos de eixos (linhas e colunas), mutáveis ​​em tamanho e potencialmente heterogêneos, sendo amplamente utilizada para manipulação e análise de dados em Python.

class pandas.DataFrame(data=None, index=None, dtype=None, name=None, copy=None, fastpath=False)

onde:

  • data: valor semelhante a uma matriz, iterável, ditado ou escalar. Contém dados armazenados em série. Se os dados são um ditado, a ordem dos argumentos é mantido.
  • index: tipo matriz ou índice (1d). Os valores devem ser hashable e ter o mesmo comprimento dos dados. Valores de índice não exclusivos são permitidos. O padrão será RangeIndex(0, 1, 2,..., n), se não for fornecido. Se os dados são ditados e o index é None, então as chaves nos dados são usadas como índice. Se o index não é None, a série resultante é reindexada com os valores do índice.
  • dtype: str, numpy.dtype ou ExtensionDtype, opcional. Tipo de dados para a série de saída. Se não especificado, isso será inferido dos dados. Veja o guia do usuário para mais usos.
  • name: Hashable, valor-padrão None, opcional. Nome para a série.
  • copy: bool, valor-padrão False. Se True, a série será copiada. Se False, a série será modificada.

data

Pode ser um ndarray (estruturado ou homogêneo), um iterável, um dicionário ou outro DataFrame. Se for um dicionário, pode conter séries, matrizes, constantes, classes de dados ou objetos semelhantes a listas. Quando um dicionário contém Series com um índice definido, o alinhamento é feito pelo índice.

3.1.0.1 - Exemplo de Código

import pandas as pd

# Criando um DataFrame a partir de um dicionário
data = {
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 12]
}

df = pd.DataFrame(data)
print("DataFrame criado a partir de um dicionário:")
print(df)

# Criando um DataFrame a partir de uma lista de dicionários
data_list = [
    {'A': 1, 'B': 5, 'C': 9},
    {'A': 2, 'B': 6, 'C': 10},
    {'A': 3, 'B': 7, 'C': 11},
    {'A': 4, 'B': 8, 'C': 12}
]

df_list = pd.DataFrame(data_list)
print("\nDataFrame criado a partir de uma lista de dicionários:")
print(df_list)

# Especificando índices e nomes das colunas
df_custom = pd.DataFrame(data, index=['a', 'b', 'c', 'd'], columns=['A', 'B', 'C'])
print("\nDataFrame com índice e colunas personalizados:")
print(df_custom)

# Forçando o dtype e copiando os dados
df_dtype = pd.DataFrame(data, dtype=float, copy=True)
print("\nDataFrame com dtype forçado para float:")
print(df_dtype)

Neste exemplo:

1. Criamos um DataFrame a partir de um dicionário.

2. Criamos um DataFrame a partir de uma lista de dicionários.

3. Personalizamos os índices e nomes das colunas do DataFrame.

4. Forçamos o dtype para `float` e copiamos os dados.

Essas funcionalidades demonstram a flexibilidade e a versatilidade da classe `pandas.DataFrame` para manipulação de dados em Python.

index

Índice a ser usado para o DataFrame resultante. O padrão é `RangeIndex` se nenhuma informação de indexação estiver presente nos dados de entrada e nenhum índice for fornecido.

Claro, aqui está um exemplo usando o parâmetro `index` ao criar um DataFrame:

import pandas as pd

# Criando um DataFrame a partir de um dicionário
data = {
    'Nome': ['Ana', 'Bruno', 'Carla', 'Daniel'],
    'Idade': [23, 35, 30, 28],
    'Cidade': ['São Paulo', 'Rio de Janeiro', 'Belo Horizonte', 'Curitiba']
}

# Especificando um índice personalizado
indices_personalizados = ['ID1', 'ID2', 'ID3', 'ID4']

# Criando o DataFrame com o índice personalizado
df = pd.DataFrame(data, index=indices_personalizados)

print("DataFrame com índice personalizado:")
print(df)

Neste exemplo, criamos um DataFrame com informações sobre pessoas, incluindo seus nomes, idades e cidades.

Em vez de usar o índice padrão `RangeIndex` (0, 1, 2, 3), especificamos um índice personalizado usando o parâmetro `index`.

O DataFrame resultante tem os índices `ID1`, `ID2`, `ID3` e `ID4`.

columns

Nomes das colunas, opcionais. Se `None`, o padrão será usar `RangeIndex` (0, 1, 2, ..., n). Se os dados contiverem rótulos de colunas, esses rótulos serão utilizados.

Claro! Aqui está um exemplo de como usar o parâmetro `dtype` ao criar um DataFrame:

import pandas as pd

# Criando um DataFrame a partir de um dicionário
data = {
    'Nome': ['Ana', 'Bruno', 'Carla', 'Daniel'],
    'Idade': [23, 35, 30, 28],
    'Altura': [1.65, 1.80, 1.75, 1.68]
}

# Especificando o dtype para forçar todas as colunas para o tipo string
df = pd.DataFrame(data, dtype=str)

print("DataFrame com dtype forçado para string:")
print(df)

# Verificando os tipos das colunas
print("\nTipos das colunas:")
print(df.dtypes)

Neste exemplo, criamos um DataFrame com informações sobre pessoas, incluindo seus nomes, idades e alturas.

Utilizamos o parâmetro `dtype` para forçar todas as colunas a serem do tipo str.

Neste DataFrame, todas as colunas são forçadas a serem do tipo `string` (`object` em termos de pandas), independentemente dos tipos de dados originais fornecidos no dicionário.

dtype

Tipo de dados a ser forçado para todas as colunas. Apenas um único dtype é permitido. Se `None`, o tipo de dado será inferido.

Claro! Aqui está um exemplo de como usar o parâmetro `dtype` ao criar um DataFrame:

import pandas as pd

# Criando um DataFrame a partir de um dicionário
data = {
    'Nome': ['Ana', 'Bruno', 'Carla', 'Daniel'],
    'Idade': [23, 35, 30, 28],
    'Altura': [1.65, 1.80, 1.75, 1.68]
}

# Especificando o dtype para forçar todas as colunas para o tipo string
df = pd.DataFrame(data, dtype=str)

print("DataFrame com dtype forçado para string:")
print(df)

# Verificando os tipos das colunas
print("\nTipos das colunas:")
print(df.dtypes)

Neste exemplo, criamos um DataFrame com informações sobre pessoas, incluindo seus nomes, idades e alturas. Utilizamos o parâmetro `dtype` para forçar todas as colunas a serem do tipo `string`.

Neste DataFrame, todas as colunas são forçadas a serem do tipo `string` (`object` em termos de pandas), independentemente dos tipos de dados originais fornecidos no dicionário.

copy

Indica se os dados devem ser copiados. Para dados de dicionário, o padrão `None` se comporta como `copy=True`. Para entrada de DataFrame ou ndarray 2D, o padrão `None` se comporta como `copy=False`.

Claro! Aqui está um exemplo de como usar o parâmetro `copy` ao criar um DataFrame:

import pandas as pd

# Criando um DataFrame a partir de um dicionário
data = {
    'Nome': ['Ana', 'Bruno', 'Carla', 'Daniel'],
    'Idade': [23, 35, 30, 28],
    'Cidade': ['São Paulo', 'Rio de Janeiro', 'Belo Horizonte', 'Curitiba']
}

# Criando um DataFrame original
df_original = pd.DataFrame(data)

# Criando um DataFrame com copy=False
df_no_copy = pd.DataFrame(data, copy=False)

# Modificando o DataFrame original
df_original['Idade'][0] = 99

print("DataFrame original modificado:")
print(df_original)

print("\nDataFrame com copy=False (sem cópia dos dados):")
print(df_no_copy)

# Criando um DataFrame com copy=True
df_with_copy = pd.DataFrame(data, copy=True)

# Modificando o DataFrame original novamente
df_original['Idade'][0] = 23

print("\nDataFrame com copy=True (dados copiados):")
print(df_with_copy)

Neste exemplo, criamos três DataFrames:

1. `df_original`: O DataFrame original criado a partir do dicionário de dados.

2. `df_no_copy`: Um DataFrame criado com `copy=False`, significando que os dados não são copiados.

3. `df_with_copy`: Um DataFrame criado com `copy=True`, significando que os dados são copiados.

Quando `copy=False`, o DataFrame `df_no_copy` compartilha os mesmos dados subjacentes que `df_original`, portanto, modificações em um afetam o outro.

Quando `copy=True`, o DataFrame `df_with_copy` tem uma cópia independente dos dados, então modificações em `df_original` não afetam `df_with_copy`.

3.2 - Atributos

index Retorna o índice (rótulos de linha) do dataframe
values Retorna uma representação Numpy do dataframe
columns Retorna os rótulos das colunas do dataframe
dtypes Retorna os dtypes no dataframe
info() Retorna um resumo conciso de um dataframe
select_dtypes() Retorna um subconjunto de colunas do DataFrame com base nos dtypes da coluna.
axes Retorna uma lista representando os eixos do dataframe
ndim Retorna um int representando o número de eixos/dimensões da matriz.
size Retorna um int representando o número de elementos neste objeto.
shape Retorna uma tupla que representa a dimensionalidade do dataframe
empty Retorna se o dataframe está vazio.
flags Retorna um objeto com sinalizadores atualizados.
set_flags() Retorna um novo objeto com sinalizadores atualizados.
memory_usage() Retorna o uso de memória de cada coluna em bytes.

Dataframe df_pessoas

Dataframe original df_pessoas para comparação.

print(df_pessoas)

Atributo index

Retorna o índice (rótulos de linha) do dataframe

DataFrame.index

O índice (rótulos de linha) do DataFrame.

O índice de um DataFrame é uma série de rótulos que identificam cada linha.

Os rótulos podem ser inteiros, textos ou qualquer outro tipo hash.

O índice é usado para acesso e alinhamento baseado em rótulo e pode ser acessado ou modificado usando este atributo.

print(df_pessoas.index)

Atributo values

Valores do DataFrame.

DataFrame.values

Retorna uma representação Numpy somente com os valores do DataFrame, os rótulos dos eixos são removidos.

print(df_pessoas.values)

Atributo columns

Rótulos das colunas do DataFrame.

DataFrame.columns

Retorna os nomes das colunas do DataFrame.

print(df_pessoas.columns)

Atributo dtypes

Retorne os dtypes no DataFrame.

DataFrame.dtypes

Isso retorna uma série com o tipo de dados de cada coluna.

O índice do resultado são as colunas do DataFrame original.

Colunas com tipos mistos são armazenadas com o dtype object .

print(df_pessoas.dtypes)

Método info()

Resumo conciso de um DataFrame

DataFrame.info(verbose=None, buf=None, max_cols=None, memory_usage=None, show_counts=None)

Este método imprime informações sobre um DataFrame, incluindo o tipo de índice e colunas, valores não nulos e uso de memória.

print(df_pessoas.info())

Método select_dtypes()

Subconjunto de colunas de um tipo.

DataFrame.select_dtypes(include=None, exclude=None)

Retorna um subconjunto de colunas do DataFrame com base nos dtypes da coluna.

print(df_pessoas.select_dtypes(include=[np.number]))

Atributo axes

Eixos do DataFrame

DataFrame.axes

Retorna uma lista representando os eixos do DataFrame, contendo os rótulos dos eixos das linhas e dos eixos das colunas como os únicos membros, nessa ordem.

print(df_pessoas.axes)

Atributo ndim

Número de Dimensões.

DataFrame.ndim

Retorna um int representando o número de eixos/dimensões da matriz: 1 para Series, 2 para DataFrame.

print(df_pessoas.ndim)

Atributo size

Número de Elementos.

DataFrame.size

Retorna um int representando o número de elementos neste objeto.

print(df_pessoas.size)

Atributo shape

Dimensões (linhas,colunas).

DataFrame.shape

Retorna uma tupla que representa a dimensionalidade do dataframe

print(df_pessoas.shape)

Atributo empty

Retorna se o DataFrame está vazio.

DataFrame.empty

Verdadeiro se Series/DataFrame estiver totalmente vazio (sem itens), o que significa que qualquer um dos eixos tem comprimento 0.

print(df_pessoas.empty)

Atributo flags

Sinalizadores.

class pandas.Flags(obj, *, allows_duplicate_labels)

Retorna um novo objeto com sinalizadores atualizados.

df_aux = pd.DataFrame({
  'A': [1, 1, 1, 2, 3 , 3, 3],
  'B': [4, 5, 4, 6, 6 , 2, 6],
})
print(df_aux.flags)
df_aux.flags.allows_duplicate_labels = False
print(df_aux.flags)

Método set_flags():

Sinalizadores.

DataFrame.set_flags(allows_duplicate_labels=None)

Método memory_usage()

Retorna o uso em bytes de memória de cada coluna.

DataFrame.memory_usage(index=True, deep=False)

O uso de memória pode incluir opcionalmente a contribuição do índice e elementos do tipo de objeto.

print(df_pessoas.memory_usage())

Este valor é exibido em DataFrame.info() por padrão. Isso pode ser suprimido definindo pandas.options.display.memory_usage como False.

3.3 - Conversão

astype() Transmita um objeto pandas para um dtype especificado dtype.
convert_dtypes() Converter colunas nos melhores dtypes possíveis usando dtypes que suportam pd.NA.
infer_objects() Tente inferir melhores dtypes para colunas de objetos.
copy() Fazer uma cópia dos índices e dados deste objeto.
bool() (DEPRECADO) Retorna o bool de um único elemento Series ou dataframe

Método astype()

Converter para tipo especificado.

DataFrame.astype(dtype, copy=None, errors='raise')

Converte um objeto pandas para um dtype especificado.

df_aux = df_pessoas.copy()
df_aux['Idade'] = df_aux['Idade'].astype(float)
print(df_aux)

Método convert_dtypes()

Conversão de tipos.

DataFrame.convert_dtypes(infer_objects=True, convert_string=True, convert_integer=True, convert_boolean=True, convert_floating=True, dtype_backend='numpy_nullable')

Converte colunas nos melhores dtypes possíveis usando dtypes que suportam pd.NA.

print(df_pessoas.convert_dtypes())

Método infer_objects()

Inferência de tipo.

DataFrame.infer_objects(copy=None)

Tenta inferir melhores dtypes para colunas de objetos, com a conversão suave de colunas de tipos de objetos conversíveis, deixando inalteradas colunas não-objeto e não conversíveis.

As regras de inferência são as mesmas da construção normal de Série/DataFrame.

df_aux = df_pessoas.copy()
print("*** antes")
print(df_aux.info())
print()
df_aux['Salario'] = df_aux['Salario'].infer_objects()
print("*** depois")
print(df_aux.info())

Método copy()

Cópia de Dataframe.

DataFrame.copy(deep=None)

Faça uma cópia dos índices e dados do DataFrame.

Quando deep=True(padrão), um novo objeto será criado com uma cópia dos dados e índices do objeto chamador. Modificações nos dados ou índices da cópia não serão refletidas no objeto original.

Quando deep=False, um novo objeto será criado sem copiar os dados ou índice do objeto chamador (somente as referências aos dados e ao índice são copiadas). Quaisquer alterações nos dados do original serão refletidas na cópia superficial (e vice-versa).

df_copia = df_pessoas.copy()
df_copia['Idade'] = 50
print(df_copia)

3.4 - Indexação/iteração

head() Retornar as primeiras n linhas.
tail([n]) Retornar as últimas n linhas.
at() Acesse um único valor para um par de rótulos de linha/coluna.
iat() Acesse um único valor para um par de linha/coluna por posição inteira.
loc() Acesse um grupo de linhas e colunas por rótulo(s) ou uma matriz booleana.
iloc() Indexação puramente baseada em localização inteira para seleção por posição.
insert() Insira a coluna no DataFrame no local especificado.
items() Iterar sobre pares (nome da coluna, série).
keys() Obtenha o 'eixo de informações'.
iterrows() Iterar sobre linhas do DataFrame como pares (índice, série).
itertuples() Iterar sobre linhas do DataFrame como nomeadastuplas.
pop(item) Retornar o item e solte-o do quadro.
xs() Seção transversal de retorno da Série/Dataframe.
get() Obtenha o item do objeto para determinada chave (ex: coluna DataFrame).
isin() Se cada elemento no DataFrame está contido em valores.
where() Substitua os valores onde a condição for Falsa.
mask() Substitua os valores onde a condição for True.
query() Consulte as colunas de um DataFrame com uma expressão booleana.
__iter__() Iterar sobre o eixo de informações.

Método head()

Retorne as primeiras n linhas.

DataFrame.head(n=5)

Esta função retorna as primeiras n linhas do objeto com base na posição. É útil para testar rapidamente se o seu objeto contém o tipo certo de dados.

Para valores negativos de n , esta função retorna todas as linhas, exceto a última |n| linhas, equivalente a df[:n].

Se n for maior que o número de linhas, esta função retornará todas as linhas.

print(df_pessoas.head(2))

Método tail()

Retornar as últimas n linhas.

DataFrame.tail(n=5)

Esta função retorna as últimas n linhas do objeto com base na posição. É útil para verificar dados rapidamente, por exemplo, após classificar ou anexar linhas.

Para valores negativos de n , esta função retorna todas as linhas, exceto as primeiras |n| linhas, equivalente a df[|n|:].

Se n for maior que o número de linhas, esta função retornará todas as linhas.

print(df_pessoas.tail(2))

Propriedade loc[]

Localização por rótulo.

DataFrame.loc[rótulo]

Acesse um grupo de linhas e colunas por rótulo(s) ou uma matriz booleana.

.loc[] é principalmente baseado em rótulo, mas também pode ser usado com uma matriz booleana.

As entradas permitidas são:

  • Um único rótulo, por exemplo, 5ou 'a', (observe que 5é interpretado como um rótulo do índice e nunca como uma posição inteira ao longo do índice).
  • Uma lista ou matriz de rótulos, por exemplo .['a', 'b', 'c']
  • Um objeto de fatia com rótulos, por exemplo 'a':'f'. Aviso: Observe que, ao contrário das fatias normais do python, tanto o início quanto o fim estão incluídos
  • Uma matriz booleana do mesmo comprimento do eixo que está sendo fatiado, por exemplo .[True, False, True]
  • Uma série booleana alinhável. O índice da chave será alinhado antes do mascaramento.
  • Um índice alinhável. O índice da seleção retornada será a entrada.
  • Uma função chamável com um argumento (a série de chamada ou DataFrame) e que retorna uma saída válida para indexação (uma das opções acima)
print(df_pessoas.loc[1:2,['Nome','Idade']])

Propriedade at()

Acessar um único valor para um par de rótulos de linha/coluna

DataFrame.at[rótulo]

Semelhante a loc, pois ambos fornecem pesquisas baseadas em rótulos. Use at() se você precisar apenas obter ou definir um único valor em um DataFrame ou Série.

print(df_pessoas.at[1, 'Nome'])

Propriedade iloc()

Localização por posição.

DataFrame.iloc[pos]

Indexação puramente baseada em localização inteira para seleção por posição.

.iloc[] é principalmente baseado em posição inteira (de 0 a tamanho-1 do eixo), mas também pode ser usado com uma matriz booleana.

As entradas permitidas são:

  • Um número inteiro, por exemplo 5.
  • Uma lista ou matriz de números inteiros, por exemplo .[4, 3, 0]
  • Um objeto de fatia com ints, por exemplo 1:7.
  • Uma matriz booleana.
  • Uma função chamável com um argumento (a série de chamada ou DataFrame) e que retorna uma saída válida para indexação (uma das opções acima). Isto é útil em cadeias de métodos, quando você não tem uma referência ao objeto chamador, mas gostaria de basear sua seleção em algum valor.
  • Uma tupla de índices de linha e coluna. Os elementos da tupla consistem em uma das entradas acima, por exemplo .(0, 1)

.iloc aumentará IndexError se um indexador solicitado estiver fora dos limites, exceto indexadores de fatia que permitem indexação fora dos limites (isso está em conformidade com a semântica de fatia python/numpy).

Valor na posição (2, 0).

print(df_pessoas.iloc[2,0])

Propriedade iat()

Retorna valor de linha/coluna.

DataFrame.iat[linha, coluna]

Acesse um único valor para um par de linha/coluna por posição inteira.

Semelhante a iloc, pois ambos fornecem pesquisas baseadas em números inteiros. Use iat se você precisar apenas obter ou definir um único valor em um DataFrame ou Série.

print(df_pessoas.iat[2, 2])

Método query()

Consulta as colunas de um DataFrame com uma expressão booleana.

DataFrame.query(expr, *, inplace = False, ** kwargs)

Seleção usando query para Idade > 30 com o DataFrame df_pessoas.

print(df_pessoas.query("Idade > 30"))

3.5 - Operadores binários

Os operadores aritméticos (+ , - , * , / , // , % , **) equivalem às funções binárias (add , sub , mul , div , floordiv , mod , pow).

Os operadores de comparação (== , != , <= , < , >= , >) equivalem às funções binárias (eq , ne , le , lt , ge , gt).

__add__() Obtenha adição de DataFrame e outros, em colunas.
add() Obtenha adição de dataframe e outros elementos (operador binário add).
sub() Obtenha subtração de dataframe e outros, elemento a elemento (operador binário sub).
mul() Obtenha a multiplicação de dataframe e outros elementos (operador binário mul).
div() Obtenha a divisão flutuante do dataframe e outros elementos (operador binário truediv).
truediv() Obtenha a divisão flutuante do dataframe e outros elementos (operador binário truediv).
floordiv() Obtenha a divisão inteira do dataframe e outros elementos (operador binário floordiv).
mod() Obtenha o módulo do dataframe e outros elementos (operador binário mod).
pow() Obtenha o poder exponencial do dataframe e outros elementos (operador binário pow).
dot() Calcule a multiplicação da matriz entre o DataFrame e outro.
radd() Obtenha adição de dataframe e outros elementos (operador binário radd).
rsub() Obtenha subtração de dataframe e outros elementos (operador binário rsub).
rmul() Obtenha a multiplicação de dataframe e outros elementos (operador binário rmul).
rdiv() Obtenha a divisão flutuante do dataframe e outros elementos (operador binário rtruediv).
rtruediv() Obtenha a divisão flutuante do dataframe e outros elementos (operador binário rtruediv).
rfloordiv() Obtenha a divisão inteira do dataframe e outros elementos (operador binário rfloordiv).
rmod() Obtenha o módulo do dataframe e outros elementos (operador binário rmod).
rpow() Obtenha o poder exponencial do dataframe e outros elementos (operador binário rpow).
lt() Obtenha menos de dataframe e outros elementos (operador binário lt).
gt() Obtenha maior que do dataframe e outros elementos (operador binário gt).
le() Obtenha menor ou igual a dataframe e outro, elemento a elemento (operador binário le).
ge() Obtenha maior ou igual a dataframe e outros, elemento a elemento (operador binário ge).
ne() Obtenha Diferente de dataframe e outro, elemento a elemento (operador binário ne).
eq() Obtenha igual a dataframe e outro, elemento a elemento (operador binário eq).
combine() Execute a combinação em colunas com outro dataframe
combine_first() Atualize elementos nulos com valor no mesmo local em other.

DataFrames df1() e df2 de exemplo

import pandas as pd

# Criar dois DataFrames de exemplo
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]})
print("df1", df1)
print()
print("df2", df2)

Método add()

Adição de dataframes.

DataFrame.add(DataFrame.add(outro, axis='columns', level=None, fill_value=None))

Obtenha adição de dataframe e outros elementos (operador binário add ).

Equivalente a DataFrame + outro, mas com suporte para substituir um fill_value por dados faltantes em uma das entradas.

A função radd() é a versão reversa.

print(df1.add(df2))

Método sub()

Subtração de dataframes.

DataFrame.sub(DataFrame.sub(outro, axis='columns', level=None, fill_value=None))

Obtenha subtração de dataframe e outros, elemento a elemento (operador binário sub).

print(df1.sub(df2))

Equivalente a DataFrame - outro, mas com suporte para substituir um fill_value por dados faltantes em uma das entradas.

A função rsub() é a versão reversa.

Método mul()

Multiplicação de dataframes.

DataFrame.mul(DataFrame.mul(outro, axis='columns', level=None, fill_value=None))

Obtenha a multiplicação de dataframe e outros elementos (operador binário mul ).

print(df1.mul(df2))

Equivalente a DataFrame * outro, mas com suporte para substituir um fill_value por dados faltantes em uma das entradas.

A função rmul() é a versão reversa.

Método div()

Divisão de dataframes.

DataFrame.div(DataFrame.div(outro, axis='columns', level=None, fill_value=None))

Obtenha a divisão flutuante do dataframe e outros elementos (operador binário truediv ).

print(df1.div(df2))

Equivalente a DataFrame / outro, mas com suporte para substituir um fill_value por dados faltantes em uma das entradas.

A função rtruediv() é a versão reversa.

Método floordiv()

Divisão flutuante de dataframes.

DataFrame.floordiv(DataFrame.floordiv(outro, axis='columns', level=None, fill_value=None))

Obtenha a divisão inteira do dataframe e outros elementos (operador binário floordiv ).

print(df1.floordiv(df2))

Equivalente a DataFrame // outro, mas com suporte para substituir um fill_value por dados faltantes em uma das entradas.

A função rfloordiv() é a versão reversa.

Método mod()

Módulo de dataframes.

DataFrame.mod(DataFrame.mod(outro, axis='columns', level=None, fill_value=None))

Obtenha o módulo do dataframe e outros elementos (operador binário mod ).

print(df1.mod(df2))

Equivalente a DataFrame % outro, mas com suporte para substituir um fill_value por dados faltantes em uma das entradas.

A função rmod() é a versão reversa.

Método pow()

Potência de dataframes.

DataFrame.pow(DataFrame.pow(outro, axis='columns', level=None, fill_value=None))

Obtenha o poder exponencial do dataframe e outros elementos (operador binário pow).

print(df1.pow(df2))

Equivalente a DataFrame ** outro, mas com suporte para substituir um fill_value por dados faltantes em uma das entradas.

A função rpow() é a versão reversa.

Método eq()

Verificação de Igualdade.

Obtenha igual a dataframe e outro, elemento a elemento (operador binário eq).

print(df1.eq(df2))

Equivalente a DataFrame == outro, mas com suporte para substituir um fill_value por dados faltantes em uma das entradas.

Método combine()

Combinação de DataFrames.

DataFrame.combine(outro, func, fill_value=None, overwrite=True)

Execute a combinação em colunas com outro DataFrame.

df3 = pd.DataFrame({'A': [10, 20, 30], 'B': [40, 50, 60]})
print(df1.combine(df3, lambda x, y: x if x[0] > y[0] else y))

Combina um DataFrame com outro DataFrame usando func para combinar colunas elemento a elemento. Os índices de linha e coluna do DataFrame resultante serão a união dos dois.

Método combine_first()

Combinação de índices.

DataFrame.combine_first(outro)

Atualize elementos nulos com valor no mesmo local em other .

df4 = pd.DataFrame({'A': [5, 6, 7], 'B': [11, 12, 13]})
combinado_primeiro = df1.combine_first(df4)
print(combinado_primeiro)

Combine dois objetos DataFrame preenchendo valores nulos em um DataFrame com valores não nulos de outro DataFrame.

Os índices de linha e coluna do DataFrame resultante serão a união dos dois.

O dataframe resultante contém os 'primeiros' valores do dataframe e substitui os valores do segundo, onde first.loc[index, col] e second.loc[index, col] não são valores ausentes, ao chamar first.combine_first(second).

3.6 - Função/GroupBy/janelas

apply() Aplique uma função ao longo de um eixo do dataframe
map() Aplicar uma função a um Dataframe elemento a elemento.
applymap() (OBSTO) Aplicar uma função a um Dataframe elemento a elemento.
pipe() Aplique funções encadeadas que esperam Series ou DataFrames.
agg() Agregue usando uma ou mais operações no eixo especificado.
aggregate() Agregue usando uma ou mais operações no eixo especificado.
transform() Chame funca autoprodução de um DataFrame com o mesmo formato de eixo que o self.
groupby() Agrupe DataFrame usando um mapeador ou por uma série de colunas.
rolling() Fornece cálculos de janela rolante.
expanding() Fornece cálculos de janela de expansão.
ewm() Fornece cálculos ponderados exponencialmente (EW).

Método apply()

Aplique uma função ao longo de um eixo do DataFrame.

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), by_row='compat', **kwargs)

Os objetos passados ​​para a função são objetos Series cujo índice é o índice do DataFrame ( axis=0) ou as colunas do DataFrame ( axis=1).

Por padrão (result_type=None), o tipo de retorno final é inferido do tipo de retorno da função aplicada. Caso contrário, depende do argumento result_type.

O exemplo a seguir cria um DataFrame de exemplo e aplica uma função para cada elemento.

def duplicar_idade(x):
    return x * 2
#
df_pessoas['Idade_Duplicada'] = df_pessoas['Idade'].apply(duplicar_idade)
print(df_pessoas)

Método map()

Aplicar uma função a um Dataframe elemento a elemento.

DataFrame.map(func, na_action=None, **kwargs)

Este método aplica uma função que aceita e retorna um escalar para cada elemento de um DataFrame.

def saudacao(nome):
    return f"Olá, {nome}"

df_pessoas['Saudacao'] = df_pessoas['Nome'].map(saudacao)
print(df_pessoas)

Método agg()

Agregue usando uma ou mais operações no eixo especificado.

DataFrame.agg(func, axis=0, *args, **kwargs)

Agregação da média da Idade e soma do Salário.

print(df_pessoas.agg({'Idade': 'mean', 'Salario': 'sum'}))

Método transform()

Transformação, com DataFrame após normalização da Idade por Salário.

DataFrame.transform(func, axis=0, *args, **kwargs)

Passe uma funcão como argumento para retornar um DataFrame com o mesmo formato de eixo que o DataFrame de origem.

def normalizar_idade(x):
    return (x - x.mean()) / x.std()

df_pessoas['Idade_Normalizada'] = df_pessoas.groupby('Salario')['Idade'].transform(normalizar_idade)
print(df_pessoas)

Método rolling()

Fornece cálculos de janela rolante.

DataFrame.rolling(janela, min_periods=None, center=False, win_type=None, on=None, axis=_NoDefault.no_default, closed=None, step=None, method='single')

Janelas rolantes genéricas suportam a especificação de janelas como um número fixo de observações ou um número variável de observações com base em um deslocamento.

Se um deslocamento baseado em tempo for fornecido, o índice baseado em tempo correspondente deverá ser monotônico.

print(df_pessoas['Salario'].rolling(window=2).mean())

Método ewm()

Média Ponderada Exponencial.

DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0, Adjust=True, ignore_na=False, axis=_NoDefault.no_default, times=None, method='single')

Fornece cálculos ponderados exponencialmente (EW).

media_ponderada = df_pessoas['Idade'].ewm(span=2).mean()
print(media_ponderada)

3.7 - Cálculos/estatísticas descritivas

abs() Retornar uma Série/DataFrame com valor numérico absoluto de cada elemento.
all() Retornar se todos os elementos são Verdadeiros, potencialmente sobre um eixo.
any() Retornar se algum elemento é True, potencialmente sobre um eixo.
clip() Corte os valores no(s) limite(s) de entrada.
corr() Calcule a correlação de pares de colunas, excluindo valores NA/nulos.
corrwith() Calcule a correlação de pares.
count() Conte células não-NA para cada coluna ou linha.
cov() Calcule a covariância pareada de colunas, excluindo valores NA/nulos.
cummax() Retornar o máximo cumulativo em um eixo DataFrame ou Série.
cummin() Retornar o mínimo cumulativo em um eixo DataFrame ou Série.
cumprod() Retornar o produto cumulativo em um eixo DataFrame ou Série.
cumsum() Retornar a soma cumulativa em um eixo DataFrame ou Série.
describe() Gerar estatísticas descritivas.
diff() Primeira diferença discreta de elemento.
eval() Avalie um texto que descreve operações em colunas dataframe
kurt() Retornar a curtose imparcial sobre o eixo solicitado.
kurtosis() Retornar a curtose imparcial sobre o eixo solicitado.
max() Retornar o máximo dos valores sobre o eixo solicitado.
mean() Retornar a média dos valores no eixo solicitado.
median() Retornar a mediana dos valores no eixo solicitado.
min() Retornar o mínimo dos valores no eixo solicitado.
mode() Obtenha o(s) modo(s) de cada elemento ao longo do eixo selecionado.
pct_change() Mudança fracionária entre o elemento atual e um elemento anterior.
prod() Retornar o produto dos valores no eixo solicitado.
product() Retornar o produto dos valores no eixo solicitado.
quantile() Retornar valores no quantil fornecido sobre o eixo solicitado.
rank() Calcule classificações de dados numéricos (1 a n) ao longo do eixo.
round() Arredonde um DataFrame para um número variável de casas decimais.
sem() Retornar o erro padrão imparcial da média sobre o eixo solicitado.
skew() Retornar a inclinação imparcial sobre o eixo solicitado.
sum() Retornar a soma dos valores no eixo solicitado.
std() Retornar o desvio padrão da amostra sobre o eixo solicitado.
var() Retornar a variação imparcial sobre o eixo solicitado.
nunique() Contar o número de elementos distintos no eixo especificado.
value_counts() Retornar uma série contendo a frequência de cada linha distinta no dataframe

O exemplo a seguir cria um DataFrame de exemplo e aplica uma função para cada elemento.

Criar um DataFrame de exemplo:

Método abs()

Valores numéricos absolutos.

DataFrame.abs()

Retorna uma Série/DataFrame com o valor numérico absoluto de cada elemento.

Esta função se aplica apenas a elementos numéricos.

print(df_pessoas[['Idade', 'Salario']].abs())

Método all()

Testa se todos valores são verdadeiros.

DataFrame.all(axis=0, bool_only=False, skipna=True, **kwargs)

Retorna se todos os elementos são Verdadeiros, potencialmente sobre um eixo.

Retorna True, a menos que haja pelo menos um elemento dentro de uma série ou ao longo de um eixo do Dataframe que seja False ou equivalente (por exemplo, zero ou vazio).

print(df_pessoas.all())

Método any()

Qualquer valor booleano.

print(df_pessoas.any())

Método corr()

Correlação de Pares entre Colunas.

print(df_pessoas.corr())

Dados estatísticos dos salários do dataframe de pessoas df_pessoas.

salarios = df_pessoas['Salario']
print(f"Média....................: {salarios.mean()}")
print(f"Máximo...................: {salarios.max()}")
print(f"Mínimo...................: {salarios.min()}")
print(f"Módulo...................:\n{salarios.mode()}")
print(f"Mediana..................: {salarios.median()}")
print(f"Moda.....................:\n{salarios.mode()}")
print(f"Variação.................: {salarios.var()}")
print(f"Desvio Padrão............: {salarios.std()}")
print(f"Inclinação...............: {salarios.skew()}")
print(f"Curtose..................: {salarios.kurt()}")
print(f"Curtose..................: {salarios.kurtosis()}")
print(f"Quartis..................: {salarios.quantile()}")
print(f"Classificações...........:\n{salarios.rank()}")
print(f"Arredondamento...........:\n{salarios.round()}")
print(f"Arredondamento 2 casas...:\n{salarios.round(2)}")
print(f"Soma.....................: {salarios.sum()}")
print(f"Distintos................: {salarios.nunique()}")
print(f"Contagem de Distintos ...:\n{salarios.value_counts()}")

3.8 - Reindexação/seleção/rótulos

add_prefix() Rótulos de prefixo com prefixo de string .
add_suffix() Rótulos de sufixo com sufixo de string .
align() Alinhe dois objetos em seus eixos com o método de junção especificado.
at_time() Selecione valores em um horário específico do dia (por exemplo, 9h30).
between_time() Selecione valores entre horários específicos do dia (por exemplo, 9h00-9h30).
drop() Elimine rótulos especificados de linhas ou colunas.
drop_duplicates() Retornar o DataFrame com as linhas duplicadas removidas.
duplicated() Retornar uma série booleana denotando linhas duplicadas.
equals() Teste se dois objetos contêm os mesmos elementos.
filter() Subdividir as linhas ou colunas do dataframe de acordo com os rótulos de índice especificados.
first() Selecione períodos iniciais de dados de série temporal com base em um deslocamento de data.
head() Retornar as primeiras n linhas.
idxmax() Índice de retorno da primeira ocorrência do máximo no eixo solicitado.
idxmin() Índice de retorno da primeira ocorrência do mínimo sobre o eixo solicitado.
last() Selecione períodos finais de dados de série temporal com base em um deslocamento de data.
reindex() Adapte o DataFrame ao novo índice com lógica de preenchimento opcional.
reindex_like() Retornar um objeto com índices correspondentes como outro objeto.
rename() Renomeie colunas ou rótulos de índice.
rename_axis() Defina o nome do eixo para o índice ou colunas.
reset_index() Redefina o índice ou um nível dele.
sample() Retornar uma amostra aleatória de itens de um eixo do objeto.
set_axis() Atribua o índice desejado a um determinado eixo.
set_index() Defina o índice DataFrame usando colunas existentes.
tail() Retornar as últimas n linhas.
take() Retornar os elementos nos índices posicionais fornecidos ao longo de um eixo.
truncate() Truncar uma série ou DataFrame antes e depois de algum valor de índice.

Método add_prefix()

DataFrame com prefixo nos rótulos das colunas.

print(df_pessoas.add_prefix('Pref_'))

Método add_suffix()

DataFrame com sufixo nos rótulos das colunas

print(df_pessoas.add_suffix('_Suff'))

Método filter()

DataFrame com colunas 'Nome' e 'Idade' mantidas

print(df_pessoas.filter(items=['Nome', 'Idade'], axis=1))

Método rename()

DataFrame com a coluna 'Nome' renomeada para 'Nome Completo'

print(df_pessoas.rename(columns={'Nome': 'Nome Completo'}))

Método reindex()

DataFrame com novo índice.

print(df_pessoas.reindex(['a', 'b', 'c', 'd']))

Método sample()

Amostra aleatória de 2 linhas do DataFrame

print(df_pessoas.sample(n=2))

3.9 - Tratamento

isna() Retorna True para existência de valores ausentes e False para todos valores existentes.
isnull() Retorna True para valores ausentes, isnull é um alias para isna.
notna() Retorna True para todos valores existentes e False para valores ausentes.
notnull() Retorna True para todos valores existentes, notnull é um alias para notna.
dropna() Retorna a série com os valores ausentes removidos.
fillna() Retorna a série com os valores NA/NaN preenchidos usando o método especificado.
bfill() Retorna a série com os valores NA/NaN preenchidos usando a próxima observação válida para preencher a lacuna.
ffill() Retorna a série com os valores NA/NaN preenchidos propagando a última observação válida para a próxima válida.
replace() Retorna a série com os valores NA/NaN substituidos com os valores fornecidos.
interpolate() Retorna a serie com os valores NaN preenchidos usando um método de interpolação.
pad() Retorna a série com os valores NA/NaN propagando a última observação válida para a próxima válida (obsoleto).

Criação do DataFrame

import pandas as pd
import numpy as np

# Criar um DataFrame de exemplo com valores ausentes
data = {'A': [1, 2, np.nan, 4, 5],
        'B': [np.nan, 2, 3, 4, np.nan]}

df_limpar = pd.DataFrame(data)

print(df_limpar)

Método isna()

Retorna True para existência de valores ausentes e False para todos valores existentes.

print(df_limpar.isna())

Método isnull

Retorna True para valores ausentes, isnull é um alias para isna.

print(df_limpar.isnull())

Método notna()

Retorna True para todos valores existentes e False para valores ausentes.

print(df_limpar.notna())

Método notnull()

Retorna True para todos valores existentes, notnull é um alias para notna.

print(df_limpar.notnull())

Método dropna()

Retorna a série com os valores ausentes removidos.

print(df_limpar.dropna())

Método fillna()

Retorna a série com os valores NA/NaN preenchidos usando o método especificado.

print(df_limpar.fillna(0))

Método bfill()

Retorna a série com os valores NA/NaN preenchidos usando a último observação válida para preencher a lacuna.

print(df_limpar.bfill())

Método ffill()

Retorna a série com os valores NA/NaN preenchidos propagando a último observação válida para a último

print(df_limpar.ffill())

Método replace()

Retorna a série com os valores NA/NaN substituidos com os valores fornecidos.

print(df_limpar.replace(0))

Método interpolate()

Retorna a serie com os valores NaN preenchidos usando um método de interpolação.

print(df_limpar.interpolate())

Método Pad()

(Obsoleto) Retorna a série com os valores NA/NaN propagando a última observação válida para a último

print(df_limpar.pad())

3.10 - Remodelando/classificando

sort_values() Retorna o dataframe ordenado pelo valor em cada coluna.
sort_index() Retorna o objeto ordenado por rótulos ao longo de um eixo.
pivot() Retorna o dataframe remodelado organizado por determinados valores de índice/coluna.
pivot_table() Retorna uma tabela dinâmica em estilo de planilha como um dataframe.
melt() Retorna o dataframe distorcido do formato largo para o formato longo, deixando opcionalmente os identificadores definidos.
explode() Retorna o dataframe transformado com cada elemento de uma lista em uma linha, replicando os valores do índice.
squeeze() Retorna a série com os níveis unidimensionais em escalares dos objetos comprimidos.
stack() Retorna os níveis empilhados prescritos das colunas ao índice.
unstack() Retorna os níveis desempilhados prescritos das colunas ao índice, dinamizando um nível dos rótulos de índice (necessariamente hierárquicos).
droplevel() Retorna a série/dataframe com níveis de índice/coluna solicitados removidos.
stacklevel() Retorna o nível de empilhamento dos rótulos de índice (necessariamente hierárquicos) do dataframe.
unstacklevel() Retorna o nível de desempilhamento dos rótulos de índice (necessariamente hierárquicos) do dataframe.
swaplevel() Troque os níveis i e j em a MultiIndex.
reorder_levels() Retorna os níveis reorganizados do índice usando a ordem de entrada.
nlargest() Retornar as primeiras n linhas ordenadas por colunas em ordem decrescente.
nsmallest() Retornar as primeiras n linhas ordenadas por colunas em ordem crescente.
to_xarray() Retorna um objeto xarray do objeto pandas.
swapaxes() (OBSOLETO) Troque eixos e troque eixos de valores adequadamente.

sort_values(): Ordenação

Retorna o dataframe ordenado pelo valor em cada coluna.

print(df_cidades.sort_values(by='Cidade'))

sort_index(): Classificação

Retorna o objeto ordenado por rótulos ao longo de um eixo.

print(df_cidades.sort_index())

pivot(): Remodelamento

Retorna o dataframe remodelado organizado por determinados valores de índice/coluna.

print(df_cidades.pivot(index='Cidade', columns='Mês', values='Vendas'))

pivot_table(): Tabela dinâmica

Retorna uma tabela dinâmica em estilo de planilha como um dataframe.

tb_pivot = df_cidades.pivot_table(index='Cidade', columns='Mês', values='Vendas', aggfunc='sum')
print(tb_pivot)

melt(): Fundir

Retorna o dataframe distorcido do formato largo para o formato longo, deixando opcionalmente os identificadores definidos.

print(df_cidades.melt(id_vars=['Cidade', 'Mês'], value_vars=['Vendas'], var_name='Variável', value_name='Valor')) 

explode(): Explodir

Retorna o dataframe transformado com cada elemento de uma lista em uma linha, replicando os valores do índice.

print(df_cidades.explode('Bairros', ignore_index=True))

explode():

Explodir série:

s_lista = pd.Series({'A': [1, 2, 3], 'B': [4, 5], 'C': [6]})
print(s_lista.explode())

squeeze(): Comprimir, espremer

Retorna a série com os níveis unidimensionais em escalares dos objetos comprimidos.

print(df_cidades['Vendas'].squeeze())

stack(): Empilhar

Retorna os níveis empilhados prescritos das colunas ao índice.

df_empilhado = df_cidades.stack()
print(df_empilhado)

unstack(): Desempilhar

Retorna os níveis desempilhados prescritos das colunas ao índice, dinamizando um nível dos rótulos de índice (necessariamente hierárquicos).

print(df_empilhado.unstack())

Desempilhamento multindexado (MultiIndex):

s_multindex = df_pessoas.set_index(['Nome', 'Idade'])
print(s_multindex.unstack())

droplevel(): Retirar o nível

Retorna a série/dataframe com níveis de índice/coluna solicitados removidos.

print(df_cidades.droplevel('Mês'))

stacklevel(): Nível de empilhamento

Retorna o nível de empilhamento do dataframe.

print(df_cidades.stacklevel())

unstacklevel(): Nível de desempilhamento

Retorna o nível de desempilhamento do dataframe.

print(df_cidades.unstacklevel())

swaplevel(): Trocar o nível

Troca os níveis i e j em a MultiIndex.

print(df_cidades.swaplevel('Cidade', 'Mês'))

reorder_levels(): Reordenar os níveis

Retorna os níveis reorganizados do índice usando a ordem de entrada.

print(df_cidades.reorder_levels(['Mês', 'Cidade']))

nlargest(): Retornar as primeiras n linhas ordenadas por colunas em ordem decrescente

Retorna as primeiras n linhas ordenadas por colunas em ordem decrescente.

print(df_cidades.nlargest(3, 'Vendas'))

nsmallest(): Retornar as primeiras n linhas ordenadas por colunas em ordem crescente

Retorna as primeiras n linhas ordenadas por colunas em ordem decrescente.

print(df_cidades.nsmallest(3, 'Vendas'))

to_xarray(): Conversão para xarray

Retorna o dataframe como um xarray.

print(df_cidades.to_xarray())

3.11 - Transposição

T Retorna o dataframe transposto usando o atributo 'T'.
transpose(*args[, copiar]) Retorna o dataframe transposto usando o método transpose() com o índice e colunas.

Atributo T

Retorna o dataframe transposto usando o atributo 'T'.

print(df_pessoas.T)

Método transpose()

Retorna o dataframe transposto usando o índice e colunas.

print(df_pessoas.transpose())

3.12 - Combinando/comparando/juntando/mesclando

assign() Retorna um novo dataframe com novas colunas.
compare() Retorna uma tabela de comparação entre dois dataframes.
join() Retorna uma junção de dois dataframes.
merge() Retorna a mesclagem de dois dataframes nomeados com uma junção no estilo de banco de dados.
update() Retorna o dataframe modificado usando valores não NA de outro dataframe

DataFrame df_id_nome exemplo

Criamos o dataframe df_id_nome com as colunas ID e Nome, usado nos exemplos.

df_id_nome = pd.DataFrame({
  'ID'   : [1, 2, 3, 4],
  'Nome' : ['Roberto', 'Rosana', 'Pedro', 'Dora']
})
print(df_id_nome)

Retornamos em df_id_nome_salario o novo dataframe incluindo a coluna 'Salario'.

Método assign(): Atribuição de novas colunas.

Retorna um novo dataframe com novas colunas.

df_id_nome_salario = df_id_nome.assign(Salario=[2000, 4000, 3000, 5000])
print(df_id_nome_salario)

O comando join junta as colunas do dataframe com as de outro dataframe usando o índice ou colunas-chave.

Vários dataframes podem ser ajuntados de forma eficiente por índice de uma só vez usando-se uma lista.

Retornamos em df_id_nome o dataframe com as colunas ID e Nome e em df_id_salario, o dataframe df_id_salario com as colunas ID e Salario e o dataframe df_id_idade com as colunas ID e Idade.:

Método compare()

df_id_nome = pd.DataFrame({
  'ID'  : [1, 2, 3, 4],
  'Nome': ['Roberto', 'Rosana', 'Pedro', 'Dora']
})

df_id_salario = pd.DataFrame({
  'ID'     : [1, 2, 3, 4],
  'Salario': [3000, 2000, 5000, 4000]
})

df_id_idade = pd.DataFrame({
  'ID'   : [1, 2, 3, 4],
  'Idade': [61, 60, 29, 93]
})

df_id_nome_salario = df_id_nome.set_index('ID').compare(df_id_salario.set_index('ID'))
print(df_id_nome_salario)

print()

df_id_nome_idade = df_id_nome.set_index('ID').compare(df_id_idade.set_index('ID'))
print(df_id_nome_idade)

Método compare()

Diferenças.

print(df1.compare(df2, keep_shape=True))

Método join()

Retorna a junção de dois dataframes.

df_id_nome_salario_idade = df_id_nome.set_index('ID').join([
    df_id_salario.set_index('ID'),
    df_id_idade.set_index('ID')])
print(df_id_nome_salario_idade)
data1 = {
  'ID': [1, 2, 3, 4],
  'Nome': ['Roberto', 'Rosana', 'Pedro', 'Dora'],
  'Salario': [50000, 60000, 75000, 80000]
}
df1 = pd.DataFrame(data1)

data2 = {
  'ID': [3, 4, 5, 6],
  'Nome': ['Pedro', 'Dora', 'Lúcia', 'Renato'],
  'Salario': [75000, 80000, 65000, 50000]
}
df2 = pd.DataFrame(data2)

Método merge()

Retorna a junção de dois dataframes.

print(df1.merge(df2, on='ID', how='inner'))

Método update()

Retorna o dataframe com as colunas atualizadas.

print(df1.update(df2, overwrite=True))

3.13 - Série temporal

asfreq() Retorna as séries temporais convertidas com a frequência especificada.
asof() Retorna as últimas linhas sem nenhum NaN.
shift() Retorna o índice de deslocamento pelo número desejado de períodos com uma frequência de tempo opcional.
first_valid_index() Retorna o índice para o primeiro valor não-NA ou None, se nenhum valor não-NA for encontrado.
last_valid_index() Retorna o índice para o último valor não-NA ou None, se nenhum valor não-NA for encontrado.
resample() Retorna a reamostragem dos dados de série temporal.
to_period() Retorna o dataframe convertido de DatetimeIndex em PeriodIndex.
to_timestamp() Retorna o dataframe convertido em DatetimeIndex de carimbos de data/hora, no início do período.
tz_convert() Retorna o dataframe convertido do eixo com reconhecimento de tz para o fuso horário de destino.
tz_localize() Retorna o índice tz-naive localizado de uma série ou dataframe para o fuso horário de destino.

Exemplo:

# Criar uma série temporal de exemplo
data_vendas = {
  'Data'   : pd.date_range(start='2023-01-01', periods=14, freq='D'),
  'Vendas' : [100, 120, 140, 160, np.nan, 150, 110, 180, np.nan, 170, 200, np.nan, 140, 120]
}
df_vendas = pd.DataFrame(data_vendas)
df_vendas.set_index('Data', inplace=True)

asfreq(): Conversão para frequêcia especificada

Retorna as séries temporais convertidas com a frequência especificada.

DataFrame.asfreq(freq, method=None, how=None, normalize=False, fill_value=None)

O método asfreq() converte séries temporais em frequência especificada, retornando os dados originais conformados a um novo índice com a frequência especificada.

Se o índice dasérie/dataframe for a PeriodIndex, o novo índice será o resultado da transformação do índice original com PeriodIndex.asfreq(portanto, o índice original será mapeado um a um para o novo índice).

Caso contrário, o novo índice será equivalente a where sendo, respectivamente, a primeira e a última entrada no índice original. Os valores correspondentes a quaisquer intervalos de tempo no novo índice que não estavam presentes no índice original serão nulos, a menos que seja fornecido um método para preencher tais incógnitas.

print(df_vendas.asfreq(freq='W', method='pad'))

asof(): Primeiras linhas sem NaN

Retorna as primeiras linhas sem nenhum NaN.

DataFrame.asof(where, subset=None)

Se houver alguma coluna com NaN nas linhas seguintes, será retornada a última linha anterior sem nenhum NaN, senão será retornado NaN.

date_to_asof = pd.to_datetime('2023-01-03')
asof_result = df_vendas.asof(date_to_asof)
print(asof_result)

shift(): Indice de deslocamento

Retorna o índice de deslocamento pelo número desejado de períodos com uma frequência de tempo opcional.

DataFrame.shift(periods=1, freq=None, axis=0, fill_value=_NoDefault.no_default, suffix=None)

Índice de deslocamento pelo número desejado de períodos com uma frequência de tempo opcional como argumento.

Quando freq não for passado, mude o índice sem realinhar os dados.

Se freq for passado (nesse caso, o índice deve ser date ou datetime, ou gerará um NotImplementedError), o índice será aumentado usando os pontos e o freq.

O argumento freq pode ser inferido quando especificado como “inferir”, desde que o atributo freq ou inferred_freq esteja definido no índice.

print(df_vendas.shift(periods=2, freq='D'))

first_valid_index(): Primeiro valor não-NA

Retorna o índice para o primeiro valor não-NA ou None, se nenhum valor não-NA for encontrado.

DataFrame.first_valid_index()

O método retorna o índice do primeiro valor não-NA ou None se nenhum valor não-NA for encontrado.

print(df_vendas['Vendas'].first_valid_index())

last_valid_index(): Ultimo valor não-NA

Retorna o índice para o último valor não-NA ou Nenhum, se nenhum valor não-NA for encontrado.

DataFrame.last_valid_index()

Último valor não-NA.

Índice de retorno para o último valor não-NA ou Nenhum, se nenhum valor não-NA for encontrado.

Se todos os elementos forem não-NA/nulos, retornará None. Também retorna None para Series/DataFrame vazio.

print(df_vendas['Vendas'].last_valid_index())

resample(): Reamostragem

Retorna a reamostragem dos dados de série temporal.

DataFrame.resample(rule, axis=_NoDefault.no_default, closed=None, label=None, convention='start', kind=None, on=None, level=None, origin='start_day', offset=None, group_keys=False)

Método de conveniência para conversão de frequência e reamostragem de séries temporais.

O objeto deve ter um índice semelhante a data e hora (DatetimeIndex, PeriodIndex ou TimedeltaIndex) ou o chamador deve passar o rótulo de uma série/índice semelhante a data e hora para o parâmetro de palavra-chave on/ level.

print(df_vendas.resample('M').sum())

to_period(): Converter em PeriodIndex

Retorna o objeto convertido em PeriodIndex.

DataFrame.to_period(freq=None, axis=0, copy=None)
print(df_vendas.to_period('M'))

to_timestamp(): Converter em DatetimeIndex

Retorna o objeto convertido em DatetimeIndex.

DataFrame.to_timestamp(freq=None, how='start', axis=0, copy=None)

Converter carimbos de data/hora em DatetimeIndex, a partir do início do período.

tz_convert(): Conversão de zona de tempo

Retorna o objeto convertido para o fuso horário de destino.

DataFrame.tz_convert(tz, axis=0, level=None, copy=True)

Converta o eixo com Localização de zona de tempo e econhecimento de tz para o fuso horário de destino.

ts_tz = df_vendas.tz_localize('UTC')
ts_tz_converted = ts_tz.tz_convert('US/Eastern')
print(ts_tz_converted)

tz_localize(): Localização de zona de tempo

Retorna o objeto convertido para o fuso horário de destino.

DataFrame.tz_localize(tz, axis=0, level=None, copy=True, ambiguous='raise', nonexistent='raise')

3.14 - Sinalizadores

Sinalizadores referem-se a atributos do objeto pandas. As propriedades do conjunto de dados (como a data em que foi registrado, o URL de onde foi acessado, etc.) devem ser armazenadas no arquivo dataframe attrs.

Flags(obj, *, permite_duplicate_labels) Sinalizadores que se aplicam a objetos pandas.

3.15 - Metadados

O atributo attrs é um dicionário para armazenar metadados globais para o dataframe, considerado experimental e que pode mudar sem aviso prévio.

3.16 - Plotagem

plot é um método que pode ser chamado e um atributo de namespace para métodos de plotagem específicos do formulário dataframeplot..

plot() Acessador e método de plotagem DataFrame
plot.area() Desenha um gráfico de área empilhada.
plot.bar() Gera um gráfico de barras verticais.
plot.barh() Faz um gráfico de barras horizontais.
plot.box() Faz um box plot das colunas do dataframe
plot.density() Gera um gráfico de estimativa de densidade do kernel usando kernels gaussianos.
plot.hexbin() Gera um gráfico de classificação hexagonal.
plot.hist() Desenhe um histograma das colunas do dataframe
plot.kde() Gera um gráfico de estimativa de densidade do kernel usando kernels gaussianos.
plot.line() Plota séries ou DataFrame como linhas.
plot.pie() Gera um gráfico de pizza.
plot.scatter() Cria um gráfico de dispersão com tamanhos e cores de pontos de marcador variados.
boxplot() Faz um box plot a partir de colunas do dataframe
hist() Faz um histograma das colunas do dataframe

3.17 - Acessador esparso

Métodos e atributos específicos do tipo esparso são fornecidos no acessador sparse do dataframe.

sparse.density Proporção entre pontos não esparsos e pontos de dados totais (densos).
sparse.from_spmatrix() Criar um novo DataFrame a partir de uma matriz esparsa scipy.
sparse.to_coo() Retorna o conteúdo do quadro como uma matriz SciPy COO esparsa.
sparse.to_dense() Converte um DataFrame com valores esparsos em denso.

3.18 - Serialização/IO/conversão

to_dict() Converte o dataframe em um dicionário.
from_dict() Constroe um dataframe a partir de dict de array ou dicts.
to_records() Converte dataframe em uma matriz de registros NumPy.
from_records() Converte um ndarray estruturado ou de registro em dataframe
to_json() Converte o objeto em um texto JSON.
read_json() Constroe um dataframe a partir de um texto JSON.
to_html() Renderiza um dataframe como uma tabela HTML.
read_html() Constroe um dataframe a partir de uma tabela HTML.
to_csv() Grave o objeto em um arquivo de valores separados por vírgula (csv).
read_csv() Constroe um dataframe a partir de um arquivo csv.
to_excel() Escreve o objeto em uma planilha do Excel.
read_excel() Constroe um dataframe a partir de um arquivo Excel.
to_sql() Grave registros armazenados em um dataframe em um banco de dados SQL.
read_sql() Constroe um dataframe a partir de um banco de dados SQL.
to_orc() Escreve um dataframe no formato ORC.
read_orc() Constroe um dataframe a partir de um arquivo ORC.
to_parquet() Escreve um dataframe no formato parquet binário.
read_parquet() Constroe um dataframe a partir de um arquivo parquet binário.
to_pickle() Pickle (serializar) objeto para arquivo.
read_pickle() Constroe um dataframe a partir de um arquivo pickle.
to_hdf() Grave os dados contidos em um arquivo HDF5 usando HDFStore.
read_hdf() Constroe um dataframe a partir de um arquivo HDF5.
to_feather() Escreve um dataframe no formato Feather binário.
read_feather() Constroe um dataframe a partir de um arquivo feather binário.
to_latex() Renderiza o objeto em uma tabela LaTeX tabular, longtable ou aninhada.
read_latex() Constroe um dataframe a partir de uma tabela LaTeX tabular, longtable ou aninhada.
to_stata() Exportar o objeto dataframe para o formato Stata dta.
read_stata() Constroe um dataframe a partir de um arquivo Stata dta.
to_gbq() Escreve um dataframe em uma tabela do Google BigQuery.
to_string() Renderiza um dataframe em uma saída tabular amigável ao console.
to_clipboard() Copiar o objeto para a área de transferência do sistema.
to_markdown() Imprime dataframe em formato compatível com Markdown.
style Retorna um objeto Styler.
__dataframe__() Retorna o objeto de intercâmbio de dataframe que implementa o protocolo de intercâmbio.

Dataframe Exemplo

df_exemplo = pd.DataFrame({
  'Nome'  : ['Roberto', 'Rosana', 'Pedro'],
  'Idade' : [60, 61, 29]
})

Métodos to_dict() e from_dict()

DataFrame como dicionário.

dicionario = df_exemplo.to_dict()
print(dicionario)
print("Tipo:", type(dicionario))
print()
print(pd.DataFrame.from_dict(dicionario))

Métodos to_records() e from_records()

Criar DataFrame a partir de uma lista de registros.

Métodos to_json() e read_json()

O método to_json() retorna um texto JSON com o conteúdo do DataFrame.

O método read_json() retorna o DataFrame a partir de um texto JSON.

json = df_exemplo.to_json(orient='records')
print(json)
print("Tipo:", type(json))
print()
print(pd.read_json(json, orient='records'))

Métodos to_html() e read_html()

Salvar o DataFrame como uma tabela HTML.

html = df_exemplo.to_html()
print(html)
print("Tipo:", type(html))
print()
print(pd.read_html(html))

Métodos to_csv() e read_csv()

Salvar e ler o DataFrame como arquivo CSV.

df_exemplo.to_csv('exemplo.csv', index=False)
print(pd.read_csv('exemplo.csv'))

Métodos to_excel() e read_excel()

Salvar e ler o DataFrame como arquivo de planilha Excel

df_exemplo.to_excel('exemplo.xlsx', index=False)
print(pd.read_excel('exemplo.xlsx'))

Métodos to_sql() e read_sql()

Salvar o DataFrame em um banco de dados SQL (SQLite)

Lendo dados do banco de dados SQL de volta para um DataFrame

from sqlalchemy import create_engine
engine = create_engine('exemplo.db')
df_exemplo.to_sql('tabela_exemplo', con=engine, if_exists='replace')
df_from_sql = pd.read_sql('tabela_exemplo', con=engine)

Métodos to_orc() e read_orc()

Salvar e ler o DataFrame com arquivo no formato ORC.

df_exemplo.to_orc('exemplo.orc')
print(pd.read_orc('exemplo.orc'))

Métodos to_parquet() e read_parquet()

Salvar e ler o DataFrame como arquivo no formato parquet.

df_exemplo.to_parquet('exemplo.parquet')
print(pd.read_parquet('exemplo.parquet'))

Métodos to_pickle() e read_pickle()

Salvar e ler o DataFrame como arquivo no formato pickle.

df_exemplo.to_pickle('exemplo.pkl')
print(pd.read_pickle('exemplo.pkl'))

Métodos to_hdf() e read_hdf()

Salvar e ler o DataFrame como arquivo no formato HDF5.

df_exemplo.to_hdf('exemplo.h5', key='mydata', mode='w')
print(pd.read_hdf('exemplo.h5', key='mydata'))

Métodos to_feather() e read_feather()

Salvar o DataFrame em formato Feather.

df_exemplo.to_feather('exemplo.feather')
print(pd.read_feather('exemplo.feather'))

Métodos to_latex() e read_latex()

Salvar e ler o DataFrame como arquivo no formato LaTeX

print(df_exemplo.to_latex())

Métodos () e read_stata()

Salvar e ler o DataFrame como arquivo no formato Stata.

df_exemplo.to_stata('exemplo.dta', write_index=False)
print(pd.read_stata('exemplo.dta'))

Método to_gbq()

Salvar o DataFrame no Google BigQuery (requer autenticação e configuração prévia)

from google.oauth2 import service_account
from pandas_gbq import to_gbq
credentials = service_account.Credentials.from_service_account_file('path-to-credentials.json')
to_gbq(df_exemplo, destination_table='project_id.dataset_id.table_id', if_exists='replace', credentials=credentials)
Arduino
Coautor
Betobyte
Autor
Autores
||| Áreas ||| Estatística ||| Python ||| Projetos ||| Dicas & Truques ||| Quantum ||| Pandas || Python para Iniciantes || Python Básico || Matplotlib || Numpy || Seaborn || Pandas || Django || Estatística para Cientistas de Dados || Python com ML Básico || Python com ML Básico || Aulas | Introdução (introdução) | Series (Series) | Dataframes (Dataframes) | Limpeza (limpeza) | Correlações (correlações) | Plotagem Pandas (plotagem pandas) | Seleções Pandas (Seleções pandas) | Pandas x SQL (Pandas x SQL) |