# 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](https://es.libreoffice.org/ "Página de inicio de LibreOffice"). Cada coluna de um DataFrame pode conter diferentes [tipos de dados do Python](https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/tipos-de-dados-python/). Em outras palavras, um DataFrame permite incluir **dados heterogéneos** (como valores numéricos, cadeias de caracteres ou booleanos) na mesma tabela.

Dica 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](https://numpy.org/pt/ "Página de inicio de NymPy"), 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.

[![Imagem: Estructura de un DataFrame de Pandas](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/e/9/csm_pandas-dataframe-structure_0ab3bff2f5.webp "Estructura de un DataFrame de Pandas")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Schaubilder/pandas-dataframe-structure.png) Los DataFrames de Pandas tienen una estructura tabular y, por lo tanto, son muy similares a las tablas de Excel o de SQL.  Nota 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:

```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     Francisco
```

Como 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:

```python
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      90000
```

Com 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](https://www.ionos.com/pt-pt/digitalguide/servidores/know-how/o-que-e-sql/). Para isso, deve chamar a função correspondente do Pandas:

```python
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)
```

Os 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](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html "Página de Pandas sobre DataFrames").

Dica 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:

```python
# 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']])
```

Como 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:

```python
print(df.loc[df['Edad'] > 30])
```

També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:

```python
print(df.iloc[3, 4])
# Salida:
# Valencia
print(df.iloc[[3, 4, 6], 4])
# Salida:
# 3    Valencia
# 4    Madrid
# 6    Sevilla
```

### Iterar 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()`:

```python
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 salida
```


This is a markdown version of: [https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/dataframes-do-pandas-python/](https://www.ionos.com/pt-pt/digitalguide/paginas-web/desenvolvimento-web/dataframes-do-pandas-python/) for AI/LLM consumption.