es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Múltiples condiciones WHERE en read_sql de Pandas.

Tengo mis datos almacenados en una base de datos SQLite3 y ahora estoy intentando trabajar en un pequeño script para acceder a los datos que quiero para determinadas fechas. Logré hacer que la instrucción SELECT funcionara con los intervalos de fechas, pero no logro añadir otra condición para afinar la búsqueda.

Las columnas de la base de datos son: id, date, driverid, drivername, pickupStop, pickupPkg, delStop, delPkg.

Hasta ahora, esto es lo que tengo:

import pandas as pd
import sqlite3

sql_data = 'driverperformance.sqlite'
conn = sqlite3.connect(sql_data)
cur = conn.cursor()

date_start = "2021-12-04"
date_end = "2021-12-10"

df = pd.read_sql_query("SELECT DISTINCT drivername FROM DriverPerf WHERE date BETWEEN :dstart and :dend", params={"dstart": date_start, "dend": date_end}, con=conn)
drivers = df.values.tolist()

for d in drivers:
    driverDF = pd.read_sql_query("SELECT * FROM DriverPerf WHERE drivername = :driver AND date BETWEEN :dstart and :dend", params={"driver": d, "dstart": date_start, "dend": date_end}, con=conn)

He probado varias versiones de la parte “WHERE drivername”, pero siempre parece fallar.

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando agregar otra condición a tu consulta SQL para afinar aún más tu búsqueda. Según tu código actual, parece que quieres filtrar tus datos en función del rendimiento de un conductor específico para un rango de fechas determinado.

    Para agregar otra condición a tu cláusula WHERE, simplemente necesitas usar la palabra clave AND para combinar múltiples condiciones. Por ejemplo, si quieres filtrar tus datos en función del rendimiento de un conductor específico para un rango de fechas determinado y una parada de recogida, tu consulta SQL se vería así:

    SELECT * FROM DriverPerf WHERE drivername = :driver AND date BETWEEN :dstart and :dend AND pickupStop = :pickupStop
    

    En esta consulta, :pickupStop es un parámetro que debes pasar a través del diccionario de parámetros en tu método pd.read_sql_query().

    driverDF = pd.read_sql_query("SELECT * FROM DriverPerf WHERE drivername = :driver AND date BETWEEN :dstart and :dend AND pickupStop = :pickupStop", params={"driver": d, "dstart": fecha_inicio, "dend": fecha_fin, "pickupStop" : 'TU_ID_PARADA_RECOGIDA'}, con=conn)
    

    Reemplaza TU_ID_PARADA_RECOGIDA con el ID de la parada de recogida por la que quieres filtrar.

    ¡Espero que esto te ayude!

Comments are closed.