Dividir un marco de datos de pandas cada 5 filas [duplicar]

Tengo un marco de datos df :

df
====================================
|            COLUMN_Y              |
====================================
|            value1                |
|            value2                |
|            value3                |
|            value4                |
|            value5                |
|            value6                |
|            value7                |
|            value8                |
|            value9                |
|            value10               |
|            value11               |
|            value12               |
|            value13               |    
|            value14               |
|            value15               |
|            value16               |
====================================

No hay una variable de agrupación que me gustaría utilizar para dividir este marco de datos. Quiero dividirlo en múltiples marcos de datos como este, dividirlo cada 5 filas. Por ejemplo, 1002 marcos de datos se dividirán a 200 marcos de datos con 5 filas y 1 marco de datos con 2 filas. ¿Cómo puedo hacer esto?

df1
====================================
|            COLUMN_Y              |
====================================
|            value1                |
|            value2                |
|            value3                |
|            value4                |
|            value5                |
====================================

 df2

====================================
|            COLUMN_Y              |
====================================
|            value6                |
|            value7                |
|            value8                |
|            value9                |
|            value10               |
====================================

df3
====================================
|            COLUMN_Y              |
====================================
|            value11               |
|            value12               |
|            value13               |
|            value14               |
|            value15               |
====================================

df4
====================================
|            COLUMN_Y              |
====================================
|            value16               |
====================================

Pregunta hecha hace 3 años, 4 meses, 28 días - Por binarymaestro


5 Respuestas:

  • Utilice la división del piso en el índice para crear sus grupos, entonces podemos utilizar DataFrame.groupby crear diferentes marcos de datos:

    grps = df.groupby(df.index // 5)
    
    for _, dfg in grps:
        print(dfg)
    
    
      COLUMN_Y
    0   value1
    1   value2
    2   value3
    3   value4
    4   value5 
    
      COLUMN_Y
    5   value6
    6   value7
    7   value8
    8   value9
    9  value10 
    
       COLUMN_Y
    10  value11
    11  value12
    12  value13
    13  value14
    14  value15 
    
       COLUMN_Y
    15  value16 
    

    Respondida el Dec 19, 2020 a las 13:56 - por apiartisan

    Votos positivos: 0 | Votos negativos: 0

  • El siguiente código hará la división y luego guardará diferentes CSVs:

    split_size = 5
    dfs = [df.loc[i:i+split_size-1,:] for i in range(0, len(df),split_size)]
    for _, frame in enumerate(dfs):
        frame.to_csv('df'+str(_)+'.csv', index=False)
    

    Respondida el Dec 19, 2020 a las 14:03 - por codesculptor3f6e

    Votos positivos: 0 | Votos negativos: 0

  • Pruébalo. list comprensión:

    listofdataframes = [df.iloc[i:i + 5] for i in range(0, len(lst), 5)]
    

    Respondida el Dec 19, 2020 a las 14:13 - por algorithmwhiz

    Votos positivos: 0 | Votos negativos: 0

  • Puedes lograr esto utilizando un bucle en Python y la función iloc de pandas para seleccionar las filas correspondientes a cada marco de datos. Aquí te dejo un ejemplo de cómo podrías hacerlo:

    ```python import pandas as pd

    Crear un DataFrame de ejemplo

    data = { 'COLUMN_Y': ['value1', 'value2', 'value3', 'value4', 'value5', 'value6', 'value7', 'value8', 'value9', 'value10', 'value11', 'value12', 'value13', 'value14', 'value15', 'value16'] }

    df = pd.DataFrame(data)

    Dividir el DataFrame en múltiples DataFrames de 5 filas

    chunksize = 5 numchunks = (len(df) // chunk_size) + 1

    for i in range(numchunks): startidx = i chunksize endidx = (i + 1) chunksize chunkdf = df.iloc[startidx:endidx]

    <h1>Imprimir el DataFrame dividido</h1>    print(f'df{i+1}')
    print(chunk_df)
    print('='*35)
    

    Respondida el Dec 20, 2020 a las 13:54 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Método 1: usando itertools.islice()

    ```python import itertools

    Crea una lista de marcos de datos vacíos

    dfs = []

    Itera sobre el marco de datos original en bloques de 5 filas

    for i in range(0, len(df), 5):

    Utiliza islice para obtener un bloque de 5 filas

    bloque = list(itertools.islice(df, i, i + 5))

    <h1>Crea un nuevo marco de datos a partir del bloque</h1>    df_bloque = pd.DataFrame(bloque)
    
    <h1>Agrega el marco de datos de bloque a la lista</h1>    dfs.append(df_bloque)
    

    ```

    Método 2: usando pd.DataFrame.groupby() y pd.Grouper()

    python
    

    Agrupa el marco de datos en grupos de 5 filas

    g = df.groupby(pd.Grouper(freq='5S'))

    Itera sobre los grupos para crear marcos de datos individuales

    dfs = [group for _, group in g]

    Respondida el Dec 20, 2020 a las 14:06 - por Gemini

    Votos positivos: 0 | Votos negativos: 0