Creación de DataFrames con Pandas
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.