DataFrames por filas o columnas¶Es una operación corriente.
Consiste en unir dos
DataFrames, poniendo las filas del segundo a continuación de las filas del primero, o las columnas del segundo a continuación de las columnas del primero.
# Preliminares
import pandas as pd
import numpy as np
Consideramos los dos DataFrames:
df1 = pd.DataFrame(np.arange(9).reshape(3, 3), index=list('ijk'), columns=list('abc'))
df1
| a | b | c | |
|---|---|---|---|
| i | 0 | 1 | 2 |
| j | 3 | 4 | 5 |
| k | 6 | 7 | 8 |
df2 = pd.DataFrame(np.arange(20, 26).reshape(2, 3), index=list('lm'), columns=list('abc'))
df2
| a | b | c | |
|---|---|---|---|
| l | 20 | 21 | 22 |
| m | 23 | 24 | 25 |
En su versión más sencilla, pasamos un iterable (lista por ejemplo) de DataFrames a pd.concat:
pd.concat([df1, df2])
| a | b | c | |
|---|---|---|---|
| i | 0 | 1 | 2 |
| j | 3 | 4 | 5 |
| k | 6 | 7 | 8 |
| l | 20 | 21 | 22 |
| m | 23 | 24 | 25 |
Usamos el parámetro axis que por defecto es igual a 0 (filas).
# Introducimos un nuevo DataFrame para ilustrarlo
df3 = pd.DataFrame(
np.arange(30, 36).reshape(3, 2),
index=list('ijk'),
columns=list('df')
)
df3
| d | f | |
|---|---|---|
| i | 30 | 31 |
| j | 32 | 33 |
| k | 34 | 35 |
pd.concat([df1, df3], axis=1)
| a | b | c | d | f | |
|---|---|---|---|---|---|
| i | 0 | 1 | 2 | 30 | 31 |
| j | 3 | 4 | 5 | 32 | 33 |
| k | 6 | 7 | 8 | 34 | 35 |
concat alinea las filas o las columnas antes de realizar la unión¶Para demostrarlo, cambiemos las filas de df3, usando el "slicing" con un step negativo.
df3 = df3.loc[::-1,:]
df3
| d | f | |
|---|---|---|
| k | 34 | 35 |
| j | 32 | 33 |
| i | 30 | 31 |
Al unirlos por las columnas, pd.concat alinea las filas basándose en sus etiquetas:
pd.concat([df1, df3], axis=1)
| a | b | c | d | f | |
|---|---|---|---|---|---|
| i | 0 | 1 | 2 | 30 | 31 |
| j | 3 | 4 | 5 | 32 | 33 |
| k | 6 | 7 | 8 | 34 | 35 |
Obtenemos el mismo resultado que antes de cambiar el orden de las filas de
df3.