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.

Cómo crear una función con SQL en Python y crear columnas?

Estoy accediendo a una base de datos de Microsoft SQL Server con pyodbc en Python y tengo muchas tablas relacionadas con estados y años. Estoy intentando crear un pandas.DataFrame con todas ellas, pero no sé cómo crear una función y al mismo tiempo crear columnas especificando YEAR y STATE para cada uno de estos estados y años (estoy usando NY2000 como ejemplo). ¿Cómo debo construir esa función o “if loop”? Disculpa la falta de claridad, es mi primera publicación aquí :/

tables = tuple([NY2000DX, NY2001DX, NY2002DX, AL2000DX, AL2001DX, AL2002DX, MA2000DX, MA2001DX, MA2002DX])
jobs = tuple([55, 120])

query = """SELECT
             ID,
             Job_ID
             FROM {}
             WHERE Job_ID IN {}""".format(tables, jobs)

NY2000 = pd.read_sql(query, server)

NY2000["State"] = "NY"
NY2000["Year"] = 2000

Mi resultado deseado sería un DF con la información de todas las tablas con columnas que especifiquen State y Year. Como:

Year State ID Job_ID
2000 NY 13 55
2001 NY 20 55
2002 NY 25 55
2000 AL 15 120
2001 AL 60 120
2002 AL 45 120
———— ——- ——– ———-

Gracias por el apoyo 🙂

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, puedes crear una función que tome el estado y el año como parámetros y devuelva un pandas.DataFrame para ese estado y año en particular. Luego, puedes usar un bucle para iterar a través de todas las tablas y llamar a la función con los valores de estado y año apropiados.

    Aquí tienes un ejemplo de código:

    import pandas as pd
    import pyodbc
    
    # Configurar la conexión pyodbc
    server = 'localhost'
    database = 'mydatabase'
    username = 'myusername'
    password = 'mypassword'
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
    
    # Definir función para obtener los datos de un estado y año particular
    def get_data(estado, año):
        nombre_tabla = '{}{}'.format(estado, año)
        consulta = 'SELECT ID, Job_ID FROM {}'.format(nombre_tabla)
        df = pd.read_sql(consulta, cnxn)
        df['Estado'] = estado
        df['Año'] = año
        return df
    
    # Definir lista de estados y años
    estados = ['NY', 'AL', 'MA']
    años = [2000, 2001, 2002]
    
    # Iterar por las tablas y llamar a la función para obtener los datos
    dfs = []
    for estado in estados:
        for año in años:
            df = get_data(estado, año)
            dfs.append(df)
    
    # Concatenar los dataframes en uno solo
    resultado = pd.concat(dfs, ignore_index=True)
    
    # Imprimir el resultado final
    print(resultado)
    

    En el código anterior, definimos una función llamada get_data que toma un estado y un año como parámetros. La función crea dinámicamente el nombre de la tabla basado en el estado y el año, recupera los datos usando pyodbc y pandas, y agrega columnas para el estado y el año. Luego, la función devuelve el pandas.DataFrame resultante.

    Luego, definimos una lista de estados y años para los cuales queremos obtener datos. Usamos un bucle para llamar a la función get_data para cada combinación de estado y año, y añadimos los dataframes resultantes a una lista.

    Finalmente, concatenamos todos los dataframes de la lista en un único dataframe final, e imprimimos el resultado.

    Esto debería brindarte el resultado deseado con columnas que especifican el estado y el año.

Comments are closed.