Fundamentos do Pandas: Memória e Operações em DataFrame

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Bem-vindo ao Laboratório de Fundamentos do Pandas! Neste laboratório, exploraremos alguns aspectos fundamentais da biblioteca Pandas: uso de memória de DataFrame, tratamento de instruções if/truth, uso de métodos de Funções Definidas pelo Usuário (UDF - User Defined Function), tratamento de valores NA, diferenças com NumPy e considerações sobre segurança de threads.

Dicas da VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Compreendendo o Uso de Memória do DataFrame

O Pandas fornece vários métodos para entender o uso de memória de um DataFrame. O método .info() pode ser usado para ver um resumo, incluindo o uso de memória.

import pandas as pd
import numpy as np

## Create a DataFrame
dtypes = ["int64", "float64", "datetime64[ns]", "timedelta64[ns]", "complex128", "object", "bool"]
n = 5000
data = {t: np.random.randint(100, size=n).astype(t) for t in dtypes}
df = pd.DataFrame(data)
df["categorical"] = df["object"].astype("category")

## Display DataFrame info
df.info()

Usando Instruções if/truth com Pandas

O Pandas não suporta o uso direto de instruções if/truth devido à ambiguidade. Em vez disso, use métodos como .any(), .all() ou .empty().

## Check if any value in the Series is True
if pd.Series([False, True, False]).any():
    print("At least one True value in the Series")

Mutação com Métodos de Funções Definidas pelo Usuário (UDF)

Ao usar um método pandas que recebe uma UDF, evite alterar o DataFrame dentro da UDF. Em vez disso, faça uma cópia antes de fazer as alterações.

def f(s):
    s = s.copy()
    s.pop("a")
    return s

df = pd.DataFrame({"a": [1, 2, 3], 'b': [4, 5, 6]})
df.apply(f, axis="columns")

Lidando com Valores NA

O Pandas fornece tipos de dados de extensão de inteiro anulável (nullable-integer extension dtypes) para representar inteiros com valores possivelmente ausentes.

s_int = pd.Series([1, 2, 3, 4, 5], index=list("abcde"), dtype=pd.Int64Dtype())
s2_int = s_int.reindex(["a", "b", "c", "f", "u"])

Compreendendo as Diferenças com NumPy

Pandas e NumPy têm pequenas diferenças na forma como calculam a variância. Isso é importante a considerar ao alternar entre as duas bibliotecas.

## Variância em pandas
var_pandas = df.var()

## Variância em NumPy
var_numpy = np.var(df.values)

Considerações sobre Thread-safety em Pandas

Pandas não é 100% thread safe. Tenha cautela ao compartilhar objetos pandas entre múltiplos threads.

Lidando com Problemas de Byte-ordering

Você pode encontrar problemas de byte-ordering ao lidar com dados criados em uma máquina com uma ordem de bytes diferente. Converta os dados para a ordem de bytes nativa do sistema antes de passá-los para Pandas.

x = np.array(list(range(10)), ">i4")  ## big endian
newx = x.byteswap().newbyteorder()  ## force native byteorder
s = pd.Series(newx)

Resumo

Neste laboratório, exploramos alguns aspectos cruciais da biblioteca Pandas. Compreender esses aspectos o ajudará a utilizar Pandas de forma mais eficaz e a evitar armadilhas comuns.