python pandas dataframe slice

python - Pandas-Cortar un gran marco de datos en trozos



dataframe slice (1)

Puede usar la comprensión de la lista para dividir su marco de datos en marcos de datos más pequeños contenidos en una lista.

n = 200000 #chunk row size list_df = [df[i:i+n] for i in range(0,df.shape[0],n)]

Puede acceder a los fragmentos con:

list_df[0] list_df[1] etc...

Luego, puede volver a ensamblarlo en un marco de datos único utilizando pd.concat.

Por AcctName

list_df = [] for n,g in df.groupby(''AcctName''): list_df.append(g)

Tengo un gran marco de datos (> 3MM filas) que estoy tratando de pasar a través de una función (la siguiente está en gran medida simplificada), y sigo recibiendo un mensaje de Memory Error .

Creo que estoy pasando un marco de datos demasiado grande a la función, así que estoy tratando de:

1) Corte el marco de datos en trozos más pequeños (preferiblemente AcctName por AcctName )

2) Pase el marco de datos a la función

3) Concatenar los marcos de datos nuevamente en un gran marco de datos

def trans_times_2(df): df[''Double_Transaction''] = df[''Transaction''] * 2 large_df AcctName Timestamp Transaction ABC 12/1 12.12 ABC 12/2 20.89 ABC 12/3 51.93 DEF 12/2 13.12 DEF 12/8 9.93 DEF 12/9 92.09 GHI 12/1 14.33 GHI 12/6 21.99 GHI 12/12 98.81

Sé que mi función funciona correctamente, ya que funcionará en un marco de datos más pequeño (por ejemplo, 40,000 filas). Intenté lo siguiente, pero no tuve éxito al concatenar los pequeños marcos de datos en un gran marco de datos.

def split_df(df): new_df = [] AcctNames = df.AcctName.unique() DataFrameDict = {elem: pd.DataFrame for elem in AcctNames} key_list = [k for k in DataFrameDict.keys()] new_df = [] for key in DataFrameDict.keys(): DataFrameDict[key] = df[:][df.AcctNames == key] trans_times_2(DataFrameDict[key]) rejoined_df = pd.concat(new_df)

Cómo imagino que los marcos de datos se dividen:

df1 AcctName Timestamp Transaction Double_Transaction ABC 12/1 12.12 24.24 ABC 12/2 20.89 41.78 ABC 12/3 51.93 103.86 df2 AcctName Timestamp Transaction Double_Transaction DEF 12/2 13.12 26.24 DEF 12/8 9.93 19.86 DEF 12/9 92.09 184.18 df3 AcctName Timestamp Transaction Double_Transaction GHI 12/1 14.33 28.66 GHI 12/6 21.99 43.98 GHI 12/12 98.81 197.62