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