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