Creación de DataFrames con Pandas

Publicado por Andrea Navarro en

En este artículo veremos cómo crear DataFrames con Pandas manualmente, a partir de estructuras de Python, diferentes tipos de archivos, bases de datos y consultas a APIs.

Los DataFrames en Pandas son estructuras de datos bidimensionales muy flexibles utilizados para manipular y analizar datos originarios de diferentes fuentes. La información es organizada en filas y columnas, donde cada columna puede contener datos de diferentes tipos. Este tipo de estructuras brinda una gran cantidad de operaciones y características que facilitan la lectura, escritura y procesamiento de datos complejos.

Creación manual

Un DataFrame puede crearse de manera manual especificando los nombres de las columnas y sus valores usando una estructura de diccionario de Python. Cada elemento del diccionario representa una columna y las listas representan los valores de dicha columna.

Esta estructura de datos se pasa a la clase DataFrame de la librería.

import pandas as pd 
data = {
        'Valor A': [1, 2, 3],
        'Valor B': ['Y', 'J', 'K'],
        'Valor C': [23.5, 12.6, 23.5]
        }
df = pd.DataFrame(data)

Creación a partir de lista

Puede crearse un DataFrame a partir de una lista de listas. En este caso la estructura está formada por una lista principal cuyos elementos son una serie de listas. Cada lista interna contiene los elementos ordenados de cada fila. Es importante que cada lista tenga la misma cantidad de elementos y que se encuentren en orden con respecto a las columnas que representan.

import pandas as pd 
data = [
        ['María', 25],
        ['Pablo', 27],
        ['Marco', 30]
       ]
df = pd.DataFrame(data)

Ya que este tipo de estructura no especifica el nombre de las columnas del DataFrame, éstas son numeradas.

Es posible configurar el nombre de las columnas manualmente durante la creación del DataFrame utilizando el parámetro columns con una lista de los nombres de las columnas de forma ordenada.

import pandas as pd 
data = [
        ['María', 25],
        ['Pablo', 27],
        ['Marco', 30]
       ]
df = pd.DataFrame(data, columns=['Nombre', 'Edad'])

Creación a partir de una consulta SQL

Es posible crear un DataFrame a partir de un resultado de una consulta a una base de datos utilizando el método read_sql. Esta metodología permite una gran flexibilidad al seleccionar los datos que formarán parte del DataFrame permitiendo combinar diferentes tablas, realizar cálculos, establecer nombres de columnas y filtrar valores durante la consulta, antes de la creación de la estructura de Pandas.

El método read_sql necesitará como parámetro la consulta a la base de datos y una conexión a base de datos SQLAlchemy, sqlite3 o de tipo cadena de caracteres.

En el siguiente ejemplo se cuenta con una base de datos SQLite de la cuál se quiere obtener un DataFrame. Se utiliza el método create_engine de SQLAlchemy para crear la conexión con la base de datos SQLite. Luego, se realiza una consulta para obtener todos los registros de la tabla nombre_tabla. Finalmente se crea el DataFrame utilizando el método read_sql_query.

from sqlalchemy import create_engine

conexion = create_engine('sqlite:///database.db')
consulta = 'SELECT * FROM nombre_tabla'
df = pd.read_sql_query(consulta, conexion)

Creación a partir de una API

Para crear un DataFrame a partir del resultado de una consulta realizada a una API el único procesamiento necesario de dicho resultado es la conversión a JSON utilizando el método json de la respuesta obtenida.

Una vez realizada la conversión el DataFrame es creado utilizando la clase DataFrame y pasando como parámetros los datos convertidos.

import requests

respuesta = requests.get('url_api')
data = respuesta.json()
df = pd.DataFrame(data)

Creación a partir de archivo

A partir de archivo CSV

Para crear un DataFrame a partir de un archivo CSV se utiliza el método read_csv pasando la ubicación del archivo como parámetro.

import pandas as pd
df = pd.read_csv('archivo.csv')

En el artículo DataFrame con Pandas a partir de CSV se explican diferentes configuraciones de esta función que permiten seleccionar las cabeceras, filas y columnas del DataFrame. También se muestran técnicas para manejar archivos grandes y datos faltantes como así también manejo de separadores.

A partir de archivo JSON

De manera similar es posible crear un DataFrame a partir de un archivo JSON utilizando el método read_json pasando la ubicación del archivo origen como parámetro.

df = pd.read_json('archivo.json')

A partir de un archivo de hoja de cálculo

Para crear un DataFrame a partir de un archivo de hoja de cálculo se utiliza el método read_excel. Este método soporta diversos formatos de hojas de cálculo como xls, xlsx, xlsm, odf, ods y odt. Como parámetro debe pasarse la ubicación del archivo que quiere leerse.

df = pd.read_excel('archivo.xlsx')

Por defecto se tomaran los datos de la primer hoja del documento para generar el DataFrame. Para especificar una hoja se utiliza el parámetro sheet_name donde puede utilizarse el nombre o el número de la hoja.

df = pd.read_excel('archivo.xlsx', sheet_name='Nombre_Hoja')

Creación a partir de un archivo HTML

El método read_html permite generar DataFrames a partir de tablas en archivos HTML. Este método reconocerá los elementos <th> como los nombres de las columnas, cada elemento <tr> como una fila diferente, y cada elemento <td> como valor de una celda.

<table>
  <tr>
    <th>Color</th>
    <th>Primario</th>
  </tr>
  <tr>
    <td>Rojo</td>
    <td>Si</td>
  </tr>
  <tr>
    <td>Verde</td>
    <td>No</td>
  </tr>
   <tr>
    <td>Amarillo</td>
    <td>Si</td>
  </tr>
</table>
dfs = pd.read_html('archivo.html')

En el caso que se encuentre más de una tabla en un archivo HTML se creará un Dataframe por cada tabla devolviendo el método read_html una lista de DataFrames.

<table>
  <tr>
    <th>Color</th>
    <th>Primario</th>
  </tr>
  <tr>
    <td>Rojo</td>
    <td>Si</td>
  </tr>
  <tr>
    <td>Verde</td>
    <td>No</td>
  </tr>
   <tr>
    <td>Amarillo</td>
    <td>Si</td>
  </tr>
</table>

<table>
  <tr><th>Lenguaje</th></tr>
  <tr><td>PHP</td></tr>
  <tr><td>C++</td></tr>
  <tr><td>Python</td></tr>
  <tr><td>Rust</td></tr>
</table>
dfs = pd.read_html('archivo.html')
df = dfs[1]

En este artículo hemos repasado algunas de las maneras de crear DataFrames en Pandas a partir de diferentes estructuras de Python y orígenes.


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!

Categorías: Programación

Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora