Pandas DataFrame: como manipular tabelas em Python de maneira simples
Um DataFrame do Pandas é uma estrutura de dados com a qual você pode criar e manipular tabelas em Python. A seguir, explicamos sua estrutura, métodos e principais propriedades.
Como funcionam os DataFrames do Pandas?
Os DataFrames são o eixo central da biblioteca Pandas do Python e permitem uma análise de dados eficaz e flexível no Python. Um DataFrame é uma estrutura de dados tabular bidimensional com linhas numeradas e colunas etiquetadas. Esta estrutura permite organizar e manipular os dados de forma semelhante aos programas de folhas de cálculo convencionais, como o Excel ou o LibreOffice. Cada coluna de um DataFrame pode conter diferentes tipos de dados do Python. Em outras palavras, um DataFrame permite incluir dados heterogéneos (como valores numéricos, cadeias de caracteres ou booleanos) na mesma tabela.
Os DataFrames do Pandas baseiam-se nas matrizes do NumPy, o que permite manipular os dados e calcular valores de forma eficiente. No entanto, os DataFrames do Pandas não são exatamente iguais às estruturas de dados do NumPy, mas diferem em alguns aspetos, como na heterogeneidade e no número de dimensões. Por esse motivo, as estruturas de dados do NumPy são mais adequadas para a manipulação de valores numéricos de grande tamanho, enquanto as do Pandas são mais úteis para a manipulação geral de dados.
Estrutura dos DataFrames do Pandas
Um DataFrame é composto por três elementos principais: os dados propriamente ditos, os índices das linhas e os nomes das colunas. Os índices das linhas (ou simplesmente «índices») são os identificadores únicos de cada linha. As linhas são indexadas com valores numéricos por predefinição, mas também pode substituí-los por cadeias. Tenha em conta que os DataFrames do Pandas são indexados a partir do zero, ou seja, a numeração dos índices começa a partir de 0.

Embora os DataFrames sejam uma das estruturas de dados mais populares e úteis em Python, eles não fazem parte oficial da linguagem base e devem ser importados separadamente. Você pode fazer isso em import pandas ou from pandas import DataFrame, no início do arquivo. Você também pode usar import pandas as pd, se preferir referir-se ao módulo com um nome mais curto (“pd” neste caso).
Como utilizar os DataFrames do Pandas
Os DataFrames do Pandas oferecem uma grande variedade de técnicas e métodos para processar, analisar e visualizar dados. A seguir, apresentamos alguns dos conceitos e métodos mais importantes para a manipulação de dados com os DataFrames do Pandas:
Criar um DataFrame do Pandas
Se os dados que pretende utilizar já estiverem guardados numa lista Python ou num dicionário Python, será muito simples criar um DataFrame. Basta passar a estrutura de dados existente para o construtor do DataFrame pandas.DataFrame([Datos]) como argumento. A forma como o Pandas interpreta os dados varia dependendo da estrutura de dados que passar para o construtor. Por exemplo, pode criar um DataFrame do Pandas a partir de uma lista Python:
import pandas
liste = ["Ahmed", "Beatriz", "Candela", "David", "Isabel", "Francisco"]
df = pandas.DataFrame(liste)
print(df)
# Salida:
# 0
# 0 Ahmed
# 1 Beatriz
# 2 Candela
# 3 David
# 4 Isabel
# 5 FranciscopythonComo pode ver no exemplo anterior, com listas simples só é possível criar DataFrames com uma única coluna sem etiqueta. Por isso, é mais útil criar DataFrames a partir de dicionários que contenham listas. Nesse caso, as chaves são interpretadas como os nomes das colunas e as listas como os dados correspondentes. Pode ver isso no exemplo a seguir:
import pandas
datos = {
'Nombre': ['Arturo', 'Bruno', 'Cristian'],
'Edad': [34, 30, 55],
'Sueldo': [75000, 60000, 90000],
}
df = pandas.DataFrame(datos)
print(df)
# Salida:
# Nombre Edad Sueldo
# 0 Arturo 34 75000
# 1 Bruno 30 60000
# 2 Cristian 55 90000pythonCom este método, o DataFrame tem o formato e os cabeçalhos desejados. Se os dados não estiverem carregados no Python, pode carregá-los a partir de uma fonte externa, como um ficheiro CVS ou uma base de dados SQL. Para isso, deve chamar a função correspondente do Pandas:
import pandas
import sqlalchemy
# DataFrame de un CSV:
csv = pandas.read_csv("archivos csv/datos.csv")
# DataFrame de SQL:
engine = create_engine('postgresql://usuario:contraseña@localhost:5432/mi_base_de_datos')
sql = pandas.read_sql_query('SELECT * FROM tabla', motor)pythonOs DataFrames csv e sql do exemplo anterior contêm todos os dados do ficheiro datos.csv e da tabela SQL tabla, respetivamente. Ao criar um DataFrame a partir de uma fonte externa, também pode especificar alguns detalhes adicionais, como se os índices numéricos devem ser incluídos no DataFrame ou não. Para obter mais informações sobre os argumentos adicionais das duas funções, visite a página oficial de documentação sobre DataFrames do Pandas.
Para criar um DataFrame do Pandas a partir de uma tabela SQL, é necessário usar o Pandas em conjunto com um módulo SQL do Python, como o SQLAlchemy. Estabeleça uma ligação com a base de dados usando o módulo SQL escolhido e passe-a para read_sql_query().
Mostrar diferentes dados nos DataFrames do Pandas
Além da tabela completa, os DataFrames do Pandas também podem mostrar linhas e colunas individuais. Ou seja, pode escolher quais linhas e colunas deseja ver. Por exemplo:
# mostrar fila 0
print(df.loc[0])
# mostrar filas 3-6
print(df.loc[3:6])
# mostrar filas 3 y 6
print(df.loc[[3, 6]])
# mostrar columna “Profesión”
print(df["profesión"])
# mostrar columnas “Profesión” y “Edad”
print(df[["Profesión", "Edad"]])
# seleccionar múltiples filas y columnas
print(df.loc[[3, 6], ['Profesión', 'Edad']])pythonComo pode ver no exemplo anterior, para referenciar uma coluna, basta usar o nome da coluna entre colchetes, como nos dicionários Python. No entanto, ao referenciar uma linha, é necessário adicionar o atributo loc. Com loc, também é possível aplicar condições lógicas para filtrar os dados. Por exemplo, no código a seguir, serão exibidas apenas as linhas em que o valor de «Idade» for maior que 30:
print(df.loc[df['Edad'] > 30])pythonTambém é possível utilizar o atributo iloc para selecionar as linhas e colunas com base na sua posição dentro do DataFrame. Desta forma, pode mostrar a célula que se encontra na terceira linha e na quarta coluna, por exemplo:
print(df.iloc[3, 4])
# Salida:
# Valencia
print(df.iloc[[3, 4, 6], 4])
# Salida:
# 3 Valencia
# 4 Madrid
# 6 SevillapythonIterar entre linhas nos DataFrames do Pandas
Ao processar dados em Python, muitas vezes é necessário iterar entre as linhas dos DataFrames do Pandas, por exemplo, se quiser aplicar a mesma operação a todos os dados. Para isso, o Pandas oferece dois métodos diferentes: itertuples() e iterrows(). Ambos os métodos apresentam certas vantagens e desvantagens em termos de desempenho e facilidade de uso.
O método iterrows() retorna uma tupla composta pelo índice e uma Série para cada linha do DataFrame. Uma Série é uma estrutura de dados do Pandas ou NumPy muito semelhante a uma lista do Python em muitos aspetos, mas que oferece um melhor desempenho. Para aceder aos elementos individuais da Série, utiliza-se o nome da coluna, o que facilita consideravelmente o manuseamento dos dados.
Embora as séries Pandas sejam muito mais eficientes do que as listas Python, o uso dessas estruturas de dados acarreta um certo custo adicional de desempenho. Portanto, é melhor usar o método itertuples() ao trabalhar com DataFrames muito grandes. Ao contrário do iterrows(), itertuples() retorna a linha completa, incluindo o índice, como uma tupla, muito mais eficiente do que as séries. Nas tuplas, os elementos individuais são acedidos com um ponto, como quando se acede aos atributos de um objeto.
Outra diferença a ter em conta entre as séries e as tuplas é que as tuplas não são mutáveis (não podem ser modificadas). Portanto, se quiser iterar sobre um DataFrame utilizando o método itertuples() e desejar alterar valores, deverá referenciar o DataFrame com o atributo at e o índice da tupla. Este atributo funciona de forma muito semelhante ao atributo loc. Com a ajuda do exemplo a seguir, compreenderá melhor as diferenças entre iterrows() e itertuples():
import pandas
df = pandas.DataFrame({
'Nombre': ['Alicia', 'Bernardo', 'Carlos'],
'Edad': [25, 30, 35],
'Sueldo': [70000, 80000, 900000]
})
for index, row in df.iterrows():
row['Sueldo'] += 1000
print(f"Índice: {index}, Edad: {row['Edad']}, Sueldo: {row['Sueldo']}")
for tup in df.itertuples():
df.at[tup.Índice, 'Sueldo'] += 1000 # Valor modificado directamente en el DataFrame usando at[]
print(f"Index: {tup.Índice}, Edad: {tup.Edad}, Sueldo: {df.loc[tup.Índice, 'Edad']}")
# Ambos bucles tienen la misma salidapython