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) + 1for 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
bloque = list(itertools.islice(df, i, i + 5))islice
para obtener un bloque de 5 filas<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()
ypd.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