Iterando filas con un bucle for en un archivo csv con Pandas y Numpy Python

CorePress2024-01-25  11

El siguiente código está destinado a iterar [Val1, Val2, Val3, Val4] en un archivo csv. Guarda cada iteración en el código csv con el código dataframe.to_csv("sales.csv", index=False, mode='a', header=False). Sin embargo, el código crea una fila separada para cada valor de Val como se visualiza en la salida. Quiero hacerlo de modo que val1-4 se impriman fila por fila para cada iteración. ¿Cómo podría hacer eso para poder obtener el resultado esperado? como resultado.

from numpy import random
import pandas
Values = random.randint(100, size=(100000))
Number_array = random.randint(100, size=(1000))
for n in range(len(Values)):
    val1 = np.sum(Number_array) + Values[n] * len(Number_array)
    val2 = np.sum([Number_array])
    val3 = val1 * val2
    val4 = n * 2
    data =[Val1, Val2, Val3, Val4]
    dataframe = pandas.DataFrame(data)
    dataframe.to_csv("input.csv", index=False, mode='a', header=False)

archivo de entrada.csv:

Val1, Val2, Val3, Val4


Salida:

Val1, Val2, Val3, Val4
49793 
48793 
-1865417447 
0
82793
48793
-255248447 
2

Resultado esperado

Val1, Val2, Val3, Val4
49793,48793, -1865417447, 0
82793, 48793, -255248447, 2

¿Intenta dataframe = pandas.DataFrame([data]) en lugar de dataframe = pandas.DataFrame(data)? Solo estoy adivinando mirando tu código, no lo he intentado. Parece que quieres crear 4 columnas pero pasas una sola lista en lugar de la lista de la lista, por lo que terminas con 1 columna en lugar de 4.

- anky

28 de marzo de 2021 a las 6:16

1

@anky, observe el consumo de tiempo en cada paso, ya que se trata de agregar archivos y objetos, lo que lleva mucho tiempo y luego se agregan.lista y luego en archivar en un solo paso

- Davidder Singh

28 de marzo de 2021 a las 6:32

@ExplooreX Te tengo. :) Comenté por qué no funciona solo la parte, puede ser que si agregamos como una lista no necesitamos el modo = 'a' en tu respuesta...?

- anky

28 de marzo de 2021 a las 6:35



------------------------------------

Mira este código:

l = []
for n in range(len(Values)):
    val1 = np.sum(Number_array) + Values[n] * len(Number_array)
    val2 = np.sum([Number_array])
    val3 = val1 * val2
    val4 = n * 2
    data =[val1, val2, val3, val4]
    # dataframe = pandas.DataFrame([data])
    l.append(data)
dataframe = pandas.DataFrame(l)
dataframe.to_csv("input.csv", index=False, mode='a', header=False)

Método-2 Si desea seguir el comentario del usuario @anky, debe mirar len en len (Valores), que es de aproximadamente 100 k y estamos tratando con marcos de datos y archivos en cada iteración, lo que lleva mucho tiempo, luego los agregamos a la lista y luego los agregamos al archivo. , ya que aquí el proceso de archivo es solo un paso

Solo cambia:

   dataframe = pandas.DataFrame(data)

a:

   dataframe = pandas.DataFrame([data])
Análisis de consumo de tiempo
1st-case:
0.38395023345947266 s ± 15.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


2nd-case:  
350.7548952102661 s ± 15.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

0



------------------------------------

Eso es porque tu marco de datos se ve así

>>data
[1, 2, 3, 4]
>>dataframe = pd.DataFrame(data)
>>dataframe
   0
0  1
1  2
2  3
3  4

Puedes simplemente transponer el marco de datos para obtener la forma que deseas.quiero

>>dataframe.T
   0  1  2  3
0  1  2  3  4

O simplemente puedes anidar la lista de datos en otra lista como:

>>dataframe = pd.DataFrame([data])
>>dataframe
   0  1  2  3
0  1  2  3  4

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare