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.

Nueva entrada en un dataframe está eliminando la entrada anterior en pandas.

En este código, estoy tratando de generar datos de nivel de agua por minuto para todo un día, luego almacenar esos datos en un marco de datos de pandas. Sin embargo, cuando intento hacerlo, los nuevos datos en el marco de datos borran los anteriores y al final en el marco de datos solo queda un valor.

filling = 10/6
emptyrate = 5/6
current_level = 60
start_date = '11/01/01'
end_date = '11/02/01'
start = datetime.strptime(start_date, "%y/%d/%m")
end = datetime.strptime(end_date, "%y/%d/%m")

# generando valores aleatorios para determinar el estado del motor

now = start
workdate = now.date()
nowtime = now.time()

endt = end
ktime = end

# generando nivel aleatorio de agua en el tanque

print(current_level)

def fill():
    global now
    global workdate
    global nowtime
    global ktime
    global current_level
    global flag

while x == 'on' and current_level <= 450:
    Data = {'time':now,'status':x,'level':current_level}
    df = pd.DataFrame(Data, index = [0])

    print(current_level)  
    current_level += filling
    current_level = round(current_level,2)
    now = now + timedelta(minutes = 1)
    nowtime = now.time()
    workdate = now.date

    if now == ktime:
        Data = {'time':now,'status':'on','level':current_level}
        df = pd.DataFrame(Data,index = [0])
        print("true")
        flag = 'red'
        break
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema en este código es que el DataFrame df de pandas se está sobrescribiendo en cada iteración del bucle while, en lugar de ser agregado con los nuevos datos. Para resolver este problema, podemos crear un DataFrame vacío fuera del bucle y usar el método append() para agregar nuevas filas en cada iteración.

    Aquí está el código modificado:

    filling = 10/6
    emptyrate = 5/6
    current_level = 60
    start_date = '11/01/01'
    end_date = '11/02/01'
    start = datetime.strptime(start_date, "%y/%d/%m")
    end = datetime.strptime(end_date, "%y/%d/%m")
    
    # creando un DataFrame vacío con las columnas requeridas
    df = pd.DataFrame(columns=["time", "status", "level"])
    
    # generando valores aleatorios para determinar el estado del motor
    now = start
    workdate = now.date()
    nowtime = now.time()
    
    endt = end
    ktime = end  
    
    # generando nivel aleatorio de agua en el tanque 
    print(current_level)
    
    def fill():
        global now
        global workdate
        global nowtime
        global ktime
        global current_level
        global flag
    
        while x == 'encendido' and current_level <= 450:
            # creando un diccionario de nuevos datos
            data = {'time': now, 'status': x, 'level': current_level}
            # agregando la nueva fila al DataFrame
            df = df.append(data, ignore_index=True)
    
            print(current_level)  
            current_level += filling
            current_level = round(current_level, 2)
            now = now + timedelta(minutes=1)
            nowtime = now.time()
            workdate = now.date
    
            if now == ktime:
                data = {'time': now, 'status': 'encendido', 'level': current_level}
                # agregando la última fila al DataFrame
                df = df.append(data, ignore_index=True)
                print("verdad")
                flag = 'rojo'
                break
    

    Ahora la nueva fila de datos se agrega al DataFrame en cada iteración, y las filas anteriores se conservan.

Comments are closed.