Podemos conectarnos a bases de datos relacionales para analizar datos usando pandas biblioteca, asà como otra biblioteca adicional para implementar la conexión a la base de datos. Este paquete se llama sqlalchemy que proporciona la funcionalidad completa del lenguaje SQL para su uso en Python.
La instalación es muy fácil con Anaconda, de la que hablamos en el capÃtulo Entorno de procesamiento de datos. Suponiendo que ha instalado Anaconda como se describe en este capÃtulo, ejecute el siguiente comando en la ventana del indicador de Anaconda para instalar el paquete SQLAlchemy.
conda install sqlalchemy
Usaremos Sqlite3 como nuestra base de datos relacional ya que es muy liviana y fácil de usar. Aunque la biblioteca SQLAlchemy puede conectarse a una variedad de fuentes relacionales, incluidas MySql, Oracle, Postgresql y Mssql. Primero creamos el motor de la base de datos y luego nos conectamos al motor de la base de datos con to_sql Función de biblioteca SQLAlchemy.
En el siguiente ejemplo, creamos una tabla relacional usando to_sql una función de un marco de datos ya creado al leer un archivo CSV. Entonces usamos read_sql_query una función de pandas para ejecutar y capturar los resultados de varias consultas SQL.
from sqlalchemy import create_engine import pandas as pd data = pd.read_csv('/path/input.csv') # Create the db engine engine = create_engine('sqlite:///:memory:') # Store the dataframe as a table data.to_sql('data_table', engine) # Query 1 on the relational table res1 = pd.read_sql_query('SELECT * FROM data_table', engine) print('Result 1') print(res1) print('') # Query 2 on the relational table res2 = pd.read_sql_query('SELECT dept,sum(salary) FROM data_table group by dept', engine) print('Result 2') print(res2)
Cuando ejecutamos el código anterior, da el siguiente resultado.
Result 1 index id name salary start_date dept 0 0 1 Rick 623.30 2012-01-01 IT 1 1 2 Dan 515.20 2013-09-23 Operations 2 2 3 Tusar 611.00 2014-11-15 IT 3 3 4 Ryan 729.00 2014-05-11 HR 4 4 5 Gary 843.25 2015-03-27 Finance 5 5 6 Rasmi 578.00 2013-05-21 IT 6 6 7 Pranab 632.80 2013-07-30 Operations 7 7 8 Guru 722.50 2014-06-17 Finance Result 2 dept sum(salary) 0 Finance 1565.75 1 HR 729.00 2 IT 1812.30 3 Operations 1148.00
También podemos insertar datos en tablas relacionales usando la función sql.execute disponible en pandas. En el siguiente código, usamos el archivo CSV anterior como entrada, lo almacenamos en una tabla relacional y luego insertamos otro registro usando sql.execute.
from sqlalchemy import create_engine from pandas.io import sql import pandas as pd data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv') engine = create_engine('sqlite:///:memory:') # Store the Data in a relational table data.to_sql('data_table', engine) # Insert another row sql.execute('INSERT INTO data_table VALUES(?,?,?,?,?,?)', engine, params=[('id',9,'Ruby',711.20,'2015-03-27','IT')]) # Read from the relational table res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine) print(res)
Cuando ejecutamos el código anterior, da el siguiente resultado.
id dept name salary start_date 0 1 IT Rick 623.30 2012-01-01 1 2 Operations Dan 515.20 2013-09-23 2 3 IT Tusar 611.00 2014-11-15 3 4 HR Ryan 729.00 2014-05-11 4 5 Finance Gary 843.25 2015-03-27 5 6 IT Rasmi 578.00 2013-05-21 6 7 Operations Pranab 632.80 2013-07-30 7 8 Finance Guru 722.50 2014-06-17 8 9 IT Ruby 711.20 2015-03-27
También podemos colocar datos en tablas relacionales usando la función sql.execute disponible en pandas. El siguiente código elimina una fila en función de una condición de entrada determinada.
from sqlalchemy import create_engine from pandas.io import sql import pandas as pd data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv') engine = create_engine('sqlite:///:memory:') data.to_sql('data_table', engine) sql.execute('Delete from data_table where name = (?) ', engine, params=[('Gary')]) res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine) print(res)
Cuando ejecutamos el código anterior, da el siguiente resultado.
id dept name salary start_date 0 1 IT Rick 623.3 2012-01-01 1 2 Operations Dan 515.2 2013-09-23 2 3 IT Tusar 611.0 2014-11-15 3 4 HR Ryan 729.0 2014-05-11 4 6 IT Rasmi 578.0 2013-05-21 5 7 Operations Pranab 632.8 2013-07-30 6 8 Finance Guru 722.5 2014-06-17
🚫