pandas é a principal biblioteca para análise de dados em Python. Aqui estão algumas coisas avançadas que gosto de fazer com os DataFrames do pandas para levar minha análise para o próximo nível.
Alterar o índice de um DataFrame
Em muitos objetos DataFrame, o índice normalmente será uma lista crescente de números. Se eu tiver algo com datas, muitas vezes gostaria de alterar o índice para algo como os dados e a hora mencionados anteriormente. Isso pode ser útil para traçar séries temporais, como vendas durante um período.
Sendo um Millennial, adoro abacates. Como também adoro dados, gostaria de saber se havia um conjunto de dados sobre abacates que eu pudesse examinar. Felizmente, existe no Kaggle. Depois de baixá-lo, importei-o:
avocado = pd.read_csv('stats/data/avocado.csv') Na verdade, o índice é apenas uma lista crescente de números no lado esquerdo do DataFrame quando uso o método head:
avocado.head()Posso mudar isso com o método set_index:
avocado.set_index("Date")Isso não altera o DataFrame. Você vai querer salvá-lo em outra variável. Você pode salvá-lo na variável criada, mas também pode usar um valor separado para manter o DataFrame original intacto:
avo_date = avocado.set_index("Date")Isso define o índice para a coluna “Data” no DataFrame. Agora quero traçar o preço médio no intervalo desses dados. Talvez isso me dê motivação para economizar para pagar a entrada de uma casa.
Primeiro, importarei o Seaborn e o usarei para aprimorar os gráficos. Vou usá-lo para definir o tema, já que faz isso para qualquer plotagem do Matplotlib, incluindo a função de plotagem do pandas:
import seaborn as sns sns.set_theme() avo_date["AveragePrice"].plot()Nesta série temporal, observe que o eixo x é automaticamente definido para o índice ou data.
Converta tabelas de largas para longas
Às vezes, é útil converter tabelas de um formato amplo para um formato mais longo. Isso é usado principalmente na plotagem de séries temporais, como os dados de vendas de abacate.
Se eu quisesse detalhar as vendas de abacate por região, poderia usar a função derreter:
avocado.melt(id_vars="type",value_vars="Total Volume").head()Para uma análise mais completa, classificada em ordem decrescente:
avocado.melt(id_vars="region",value_vars="Total Volume").sort_values(by="value",ascending=False).head()Isso diz ao pandas para fundir os dados regionais em um formato mais longo, usando o volume total de vendas, depois classificá-los em ordem decrescente e, em seguida, exibir as primeiras linhas.
Passando do formato longo para o formato largo
As tabelas dinâmicas são um recurso popular em programas de planilhas como o Excel. Eles permitem resumir dados em categorias. Como o pandas pode importar dados de planilhas, ele também pode gerar tabelas dinâmicas.
Para ver um detalhamento regional das vendas de sacos de abacate de diferentes tamanhos por regiões dos EUA, você usaria este comando:
Isso diz ao pandas para construir uma tabela dinâmica, usando a coluna “região” como índice, e as colunas de sacos pequeno, grande e “extra grande” como valores para resumir e somar todos eles.
Isso produzirá uma tabela consolidada, embora com muitos “NaNs” ou dados ausentes.
Combinando tabelas
Freqüentemente, você pode descobrir que possui tabelas com uma estrutura semelhante que deseja combinar em uma. Felizmente, é fácil fazer isso em pandas concatenando-os, que é uma palavra elegante para juntá-los.
Vejamos alguns dados fictícios de vendas que representam dois trimestres de vendas:
q1_data = { 'Date': ['2024-01-15', '2024-01-20', '2024-02-10', '2024-03-05'], 'Product': ['Laptop', 'Mouse', 'Keyboard', 'Monitor'], 'Region': ['North', 'South', 'East', 'West'], 'Sales': [1200, 25, 150, 450], 'Units': [2, 5, 3, 1] } df_q1 = pd.DataFrame(q1_data) q2_data = { 'Date': ['2024-04-12', '2024-05-18', '2024-06-22'], 'Product': ['Laptop', 'Keyboard', 'Monitor'], 'Region': ['East', 'North', 'South'], 'Sales': [1500, 175, 500], 'Units': [3, 4, 2] } df_q2 = pd.DataFrame(q2_data)Este código define dois dicionários que irão compor as tabelas, que depois serão transformadas em DataFrames.
Para combinar essas tabelas, basta usar o método pd.concat:
sales_data = pd.concat([df_q1,df_q2],axis=0)Isto criará um novo objeto DataFrame das tabelas, combinado verticalmente. Na maioria das vezes, será isso que você deseja.
Lidar com datas e horários
As séries temporais são uma grande parte da análise de dados, como volumes de vendas ou preços de ações. Você pode criar e modificar objetos de dados facilmente. Para converter a coluna de data do DataFrame abacate em uma série de data e hora:
avocado["Date"] = pd.to_datetime(avocado["Date"])Com o objeto datetime criado, você pode modificar seu DataFrame. Você pode adicionar uma coluna de mês:
avocado["month"] = avocado["Date"].dt.monthCom uma coluna definida como um objeto datetime, você pode defini-la como um índice de um DataFrame usando os métodos demonstrados anteriormente.
Manipulando dados de texto
Você pode manipular dados de texto facilmente com pandas. Você pode usar métodos de string para alterar a aparência do texto. Para converter a coluna “tipo”, distinguindo abacates regulares de orgânicos, você pode usar o método str.upper:
avocado["type"].str.upper()Isso imprimirá tudo em letras maiúsculas, para que você saiba que os avacodes orgânicos são realmente “ORGÂNICOS”. Isso pode ser menos útil na prática, mas eu queria me divertir um pouco com isso de qualquer maneira.
Você pode fazer a mesma coisa com letras minúsculas
avocado["type"].str.lower()Você pode usar o método split para dividir um DataFrame em um determinado caractere. Por exemplo, você pode criar novas colunas usando esta operação. Por exemplo, com uma coluna com uma cidade e um estado, como “Anytown, CA”, você pode dividir isso junto com o caractere vírgula (,):
df["location"].str.split(",")Com os recursos do pandas, não é difícil ver por que ele se tornou um favorito na comunidade de análise de dados Python. Um artigo como este só pode arranhar a superfície do que você pode fazer com os pandas.