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 añadir datos en una sola celda mientras se escribe datos de múltiples bucles for en un archivo CSV a través de Pandas?

Problema:-

Tengo dos bucles anidados dentro de un bucle principal que extraen diferentes datos de un rango de 5 páginas.
Cada página tiene 5 filas, pero después de escribir los datos en un archivo CSV, solo obtengo 5 celdas en las cuales cada celda tiene 5 valores.

Solución que deseo :-

Quiero que todas las fechas y horas estén en filas diferentes, por lo que en total debería haber al menos 25 filas.

Mi código mínimo :-

all = []

for i in range(d, 0, -1):
    driver.find_element_by_link_text(f' {i} ').click()
    time.sleep(5)
    c12 = []
    d12 = []

    date1 = driver.find_elements_by_class_name('Login_d')
    for i in reversed(date1):
        print(i.text)
        c12.append(i.text)
        if i is None:
            break

    date_time = driver.find_elements_by_class_name('Logout_d')
    for i1 in reversed(date_time):
        print(i1.text)
        d12.append(i1.text)
        if i1 is None:
            break

    z = [c12, d12]
    all.append(z)


 df = pd.DataFrame(all)
 path = 'C:\\Application Data\\pyt_project\\datahub'
 a1 = ['Fecha', 'Fecha_hora']
 filename = dt.datetime.now().strftime("Login_logout_time_%d_%b_%y_%I_%M_%p.csv")
 p1 = os.path.join(path, filename)
 df.to_csv(p1, headers = a1, index=True)
 print('impresión del resultado')

Resultado CSV que obtuve del código anterior

                                Fecha                                      Fecha_hora
 03 Nov 2021 08 Nov 2021 09 Nov 2021 10 Nov 2021 11 Nov 2021 | 18:39 12:59 13:05 12:57 12:57

Resultado CSV que quiero

   Fecha        Fecha_hora
03 Nov 2021     18:39
08 Nov 2021     12:59
09 Nov 2021     13:05
10 Nov 2021     12:57
11 Nov 2021     12:57

Cosas que intenté pero no funcionaron

df = pd.DataFrame({'Fecha': [c12],
                'Fecha_hora': [d12]
                },
                columns=['Fecha', 'Fecha_hora'])
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una solución para obtener la salida deseada es utilizar un bucle for anidado para iterar a través de la lista de fechas y horas, y agregarlas individualmente a una nueva lista. Esta nueva lista se puede usar luego para crear el dataframe final y escribirlo en un archivo CSV. Así es como puedes modificar tu código para lograr esto:

    all = []
    
    for i in range(d, 0, -1):
        driver.find_element_by_link_text(f'{i}').click()
        time.sleep(5)
        c12 = []
        d12 = []
    
        date1 = driver.find_elements_by_class_name('Login_d')
        for i in reversed(date1):
            print(i.text)
            c12.append(i.text)
            if i is None:
                break
    
        date_time = driver.find_elements_by_class_name('Logout_d')
        for i1 in reversed(date_time):
            print(i1.text)
            d12.append(i1.text)
            if i1 is None:
                break
    
        # Crear una nueva lista para almacenar las fechas y horas por separado
        rows = []
        for date, time in zip(c12, d12):
            rows.append([date, time])
    
        all.extend(rows)  # Ampliar la lista 'all' con las nuevas filas
    
    # Crear un nuevo dataframe a partir de la lista de filas
    df = pd.DataFrame(rows, columns=['Fecha', 'Fecha_hora'])
    path = 'C:\\Application Data\\pyt_project\\datahub'
    filename = dt.datetime.now().strftime("Login_logout_time_%d_%b_%y_%I_%M_%p.csv")
    p1 = os.path.join(path, filename)
    df.to_csv(p1, index=False)  # Escribir en el archivo CSV
    print('Salida impresa')
    

    Esto debería darte la salida deseada como se muestra arriba. Ten en cuenta que el argumento index=False en el método to_csv() se utiliza para eliminar el índice de fila de la salida.

Comments are closed.