course python numpy pandas

pandas python course



Uso de Pandas para crear DataFrame con Series, lo que resulta en un error de memoria (1)

Estoy usando la librería Pandas para el análisis de series de tiempo de detección remota. Finalmente, me gustaría guardar mi DataFrame en csv utilizando tamaños de trozos, pero tengo un pequeño problema. Mi código genera 6 matrices NumPy que convierto a Pandas Series. Cada una de estas series contiene muchos artículos.

>>> prcpSeries.shape (12626172,)

Me gustaría agregar la serie a un DataFrame (df) de Pandas para poder guardarlos por trozos en un archivo csv.

d = {''prcp'': pd.Series(prcpSeries), ''tmax'': pd.Series(tmaxSeries), ''tmin'': pd.Series(tminSeries), ''ndvi'': pd.Series(ndviSeries), ''lstm'': pd.Series(lstmSeries), ''evtm'': pd.Series(evtmSeries)} df = pd.DataFrame(d) outFile =''F:/data/output/run1/_''+str(i)+''.out'' df.to_csv(outFile, header = False, chunksize = 1000) d = None df = None

Pero mi código se atasca en la siguiente línea dando un error de memoria

df = pd.DataFrame(d)

¿Alguna sugerencia? ¿Es posible rellenar el fragmento Pandas DataFrame por fragmento?


Si sabe que cada uno de estos tiene la misma longitud, puede crear el DataFrame directamente desde la matriz y luego agregar cada columna:

df = pd.DataFrame(prcpSeries, columns=[''prcp'']) df[''tmax''] = tmaxSeries ...

Nota: también puede usar el método to_frame (que le permite (opcionalmente) pasar un nombre, lo que es útil si la Serie no tiene uno):

df = prcpSeries.to_frame(name=''prcp'')

Sin embargo, si son de longitud variable, esto perderá algunos datos (cualquier matriz que sea más larga que prcpSeries ). Una alternativa aquí es crear cada uno como un DataFrame y luego realizar una unión externa (usando concat ):

df1 = pd.DataFrame(prcpSeries, columns=[''prcp'']) df2 = pd.DataFrame(tmaxSeries, columns=[''tmax'']) ... df = pd.concat([df1, df2, ...], join=''outer'', axis=1)

Por ejemplo:

In [21]: dfA = pd.DataFrame([1,2], columns=[''A'']) In [22]: dfB = pd.DataFrame([1], columns=[''B'']) In [23]: pd.concat([dfA, dfB], join=''outer'', axis=1) Out[23]: A B 0 1 1 1 2 NaN