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 puedo tomar los datos de un único widget de entrada TKinter y añadir múltiples columnas en un dataframe de pandas?

Así que estoy tratando de crear un rastreador de inventario para mi equipo, y hasta ahora va bastante bien. Actualmente, estoy atascado en cómo hacer que esta parte funcione correctamente.

Aquí tienes un ejemplo del dataframe que he creado utilizando el programa con algunos elementos aleatorios:
randomlistof_stuff

Tengo otro pequeño script de Python para generar códigos QR para cada fila en un CSV determinado, con la idea de que cuando vaya al widget de entrada del tkinter de mi programa, escaneé el código QR con un escáner y haga clic en “agregar elemento al inventario”, se añadirá la información correspondiente en los campos respectivos del CSV.

El problema con el que estoy luchando en este momento es que cuando ingreso cualquier cosa en el widget de entrada, todo se añade solo a la columna “Name” en el CSV. Ejemplo a continuación:

Esperaba que, dado que es un CSV, al ingresar los datos en formato CSV se lograrían los resultados que estaba intentando obtener (item, descripción, inventario_actual), pero solo se añade lo que escribo a la columna “Name” – comas, espacios o cualquier cosa… no importa.

¿Cómo hago para que tome la información de un solo widget de entrada de tkinter y agregue las columnas específicas en el dataframe? ¿Es siquiera posible hacer todo esto desde un solo widget de entrada?

¡Gracias de antemano!

Código:

def addInventoryItem():
    if e.get() != '':
        # TODO
        # Intentando implementar la adición al CSV con múltiples columnas completadas por el escáner

        df = pd.read_csv(current_csv)
        addInventoryList = [e.get()]
        df = pd.DataFrame(addInventoryList)

        # Añadir el nuevo dataframe al CSV existente
        df.to_csv(current_csv, mode='a', index=False, header=False)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar columnas específicas en el dataframe desde un solo widget de entrada tkinter, puedes usar la función loc en pandas para seleccionar la fila y columna a la que añadir. Por ejemplo, si quieres agregar a las columnas “Name”, “Description” y “Current_Inventory” del CSV, puedes hacer lo siguiente:

    import pandas as pd
    
    def addInventoryItem():
        if e.get() != '':
            # Separar los valores de la cadena de entrada por comas
            values = e.get().split(',')
    
            # Leer el archivo CSV en un dataframe
            df = pd.read_csv(current_csv)
    
            # Agregar la nueva fila al dataframe
            df.loc[len(df)] = values
    
            # Guardar el nuevo dataframe en el archivo CSV
            df.to_csv(current_csv, index=False)
    

    Este código lee el archivo CSV en un dataframe, divide la cadena de entrada por comas para separar los valores de cada columna, utiliza la función loc para seleccionar la última fila del dataframe y asignar los valores de entrada a las columnas correspondientes, y guarda el dataframe actualizado en el archivo CSV sin un índice.

Comments are closed.