HOWTO · Pandas

Convertir la Series de Pandas en DataFrame

Introduce cómo convertir la serie de pandas en Dataframe

En esta página

Usa pandas.DataFrame() o pandas.Series.to_frame() para convertir una Series de Pandas en un DataFrame. Ambos métodos conservan el índice de la Series como índice de filas del DataFrame. Usa to_frame(name=...) para asignar un nombre a la columna de valores; usa reset_index(name=...) si quieres convertir el índice anterior en una columna normal. Para combinar varias Series como columnas, usa pd.concat(..., axis=1).

Los ejemplos usan esta Series, cuyas etiquetas se convierten en el índice de filas en cada conversión:

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)

print(df_series)
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64

Convertir una Series de Pandas en un DataFrame con pandas.DataFrame()

Pasa una Series a pandas.DataFrame() para crear un DataFrame de una columna. El argumento columns establece la etiqueta de la columna de valores; el índice de la Series se mantiene como índice de filas. Este constructor general resulta útil cuando ya estás creando un DataFrame a partir de otros datos.

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)

print(pd.DataFrame(df_series, columns=["A"]))
    A
a  44
b  47
c  64
d  67
e  67
f   9
g  83
h  21
i  36
j  87

El DataFrame resultante tiene una columna llamada A y conserva las etiquetas de a a j como índice.

Usa el constructor cuando la entrada ya sea una Series y quieras especificar opciones del DataFrame al crearlo. La lista columns controla la etiqueta de la columna de salida; no sustituye el índice de la Series. Si omites columns, pandas usa el nombre de la Series para la columna de valores cuando lo tiene; de lo contrario, usa 0.

Convertir una Series de Pandas en un DataFrame con pandas.Series.to_frame()

Llama a Series.to_frame() para convertir directamente una Series en un DataFrame de una columna. Pasa name para elegir la etiqueta de la columna de valores. El método conserva el índice de la Series, lo que resulta útil cuando sus etiquetas identifican las filas.

Para una sola Series, to_frame(name="A") es una alternativa concisa a pandas.DataFrame(series, columns=["A"]). Elige un nombre que describa los valores, sobre todo antes de combinar este DataFrame con otras tablas. Estas conversiones no convierten el índice de la Series en una columna de datos; para obtener esa estructura, usa reset_index().

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)

print(df_series.to_frame(name="A"))
    A
a  44
b  47
c  64
d  67
e  67
f   9
g  83
h  21
i  36
j  87

Si una Series no tiene nombre, to_frame() usa 0 como etiqueta de la columna de valores. Si también necesitas el índice de la Series como datos en una columna, usa el método reset_index(). Al asignar un nombre al eje del índice, la primera columna de salida se llama index:

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")

print(df_series)
print("\n")
print(df_series.reset_index())
index
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64


  index   0
0     a  44
1     b  47
2     c  64
3     d  67
4     e  67
5     f   9
6     g  83
7     h  21
8     i  36
9     j  87

reset_index() devuelve un DataFrame con el índice anterior en la columna index y los valores de la Series en una columna llamada 0. Pasa name para asignar directamente una etiqueta a la columna de valores:

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")

print(df_series)
print("\n")
print(df_series.reset_index(name="A"))
index
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64


  index   A
0     a  44
1     b  47
2     c  64
3     d  67
4     e  67
5     f   9
6     g  83
7     h  21
8     i  36
9     j  87

Convertir varias Series de Pandas en DataFrames

Para colocar varias Series una al lado de otra en un DataFrame, pásalas a pd.concat() con axis=1. Pandas alinea los valores según las etiquetas del índice, así que las etiquetas coincidentes quedan en la misma fila. Las Series siguientes tienen el mismo índice y producen tres columnas de valores:

import pandas as pd
import numpy as np

np.random.seed(0)

df_series1 = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series2 = pd.Series(
    np.random.randint(40, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series3 = pd.Series(
    np.random.randint(80, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)

df_stitched = pd.concat([df_series1, df_series2, df_series3], axis=1)

print(df_stitched)
    0   1   2
a  44  46  97
b  47  64  85
c  64  64  93
d  67  52  88
e  67  98  89
f   9  41  99
g  83  78  96
h  21  79  99
i  36  63  85
j  87  86  95

La función pd.concat() usa axis=1 para concatenar por columnas. Su valor predeterminado es axis=0, que concatena por filas. Si los índices son distintos, la concatenación por columnas alinea las Series según sus etiquetas; las etiquetas que falten en una Series tendrán valores ausentes en esa columna.