HOWTO · Pandas
Fusionar dos series de Pandas en un DataFrame
Esta guía demuestra cómo combinar o fusionar dos series Pandas en un DataFrame usando los métodos pandas.concat(), pandas.merge(), DataFrame.join().
En esta página
En pandas, una Series es un array etiquetado unidimensional: en esencia, una sola columna de datos con un índice. Para fusionar dos o más Series en un DataFrame, pásalas a pandas.concat() con axis=1; cada Series se convierte en una columna encabezada por su nombre. Cuando necesitas una semántica distinta, pandas.concat() también puede apilar Series verticalmente, pandas.merge() empareja filas por índice como un join de SQL, y DataFrame.join() adjunta una Series con nombre a un DataFrame existente.
Este tutorial recorre cada enfoque con ejemplos ejecutables.
Elige un método según el resultado que necesitas
Los cuatro enfoques producen datos tabulares, pero responden a preguntas diferentes:
pandas.concat([s1, s2], axis=1)coloca las Series una al lado de la otra, de modo que cada una se convierte en una columna de un nuevoDataFrame.pandas.concat([s1, s2])con el valor predeterminadoaxis=0apila las Series en una única Series más larga; envuelve el resultado enpd.DataFrame()para obtener unDataFramede una columna. Este es el reemplazo actual deSeries.append(), que se eliminó en pandas 2.0.pandas.merge(left, right, left_index=True, right_index=True)empareja filas por índice, o por valores de clave compartidos, igual que un join de SQL.df.join(series)añade una Series con nombre a unDataFrameque ya tienes, alineando por el índice.
Un comportamiento los une a todos: pandas alinea los datos etiquetados por índice. Cuando las Series de entrada comparten el mismo índice, la alineación es invisible. Cuando los índices difieren, las etiquetas presentes en una sola entrada producen valores ausentes (NaN) en el resultado combinado.
Combina Series como columnas con pandas.concat()
La función pandas.concat() concatena objetos de pandas a lo largo de un eje. Al pasar axis=1, los objetos se alinean como columnas; cada nombre de Series se convierte en un encabezado de columna y las filas se alinean por el índice.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
# Create Series by assigning names
products = pd.Series(
["Intel Dell Laptops", "HP Laptops", "Lenavo Laptops", "Acer Laptops"],
name="Products",
)
dollar_price = pd.Series([350, 300, 400, 250], name="Price")
percentage_sale = pd.Series([83, 99, 84, 76], name="Sale")
# merge three pandas series as columns using pandas.concat()
df = pd.concat([products, dollar_price, percentage_sale], axis=1)
print(df)
Salida:
Products Price Sale
0 Intel Dell Laptops 350 83
1 HP Laptops 300 99
2 Lenavo Laptops 400 84
3 Acer Laptops 250 76
Como las tres Series comparten el índice entero predeterminado, las filas se alinean en orden. Con axis=0 (el valor predeterminado), la misma llamada apilaría los valores en una Series larga en lugar de construir columnas.
Apila Series verticalmente con pandas.concat()
Las versiones antiguas de esta tarea usaban Series.append(), un atajo que concatenaba a lo largo de axis=0. Ese método quedó obsoleto en pandas 1.4 y se eliminó en pandas 2.0, por lo que llamarlo ahora produce un AttributeError. El reemplazo es pandas.concat(): pasa las Series en una lista y establece ignore_index=True para renumerar el resultado combinado.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
technical = pd.Series(["Pandas", "Python", "Scala", "Hadoop"])
non_technical = pd.Series(["SEO", "Graphic design", "Content writing", "Marketing"])
# stack the series and shape the result into a one-column DataFrame
df = pd.DataFrame(
pd.concat([technical, non_technical], ignore_index=True), columns=["Skills"]
)
print(df)
Salida:
Skills
0 Pandas
1 Python
2 Scala
3 Hadoop
4 SEO
5 Graphic design
6 Content writing
7 Marketing
Aquí pd.concat() devuelve una única Series de ocho valores, y pd.DataFrame(..., columns=["Skills"]) le da forma de DataFrame de una columna. Para conservar las etiquetas de índice originales en lugar de renumerar, omite ignore_index=True.
Empareja Series por índice con pandas.merge()
pandas.merge() realiza uniones al estilo SQL entre Series con nombre u objetos DataFrame. Como los valores fusionados se convierten en columnas, cada Series necesita un name. Establecer left_index=True y right_index=True indica a pandas.merge() que empareje las filas por el índice en lugar de por una columna de clave.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
# Create Series by assigning names
products = pd.Series(
["Intel Dell Laptops", "HP Laptops", "Lenavo Laptops", "Acer Laptops"],
name="Products",
)
dollar_price = pd.Series([350, 300, 400, 250], name="Price")
# match the two series on their index labels
df = pd.merge(products, dollar_price, right_index=True, left_index=True)
print(df)
Salida:
Products Price
0 Intel Dell Laptops 350
1 HP Laptops 300
2 Lenavo Laptops 400
3 Acer Laptops 250
La unión predeterminada es how="inner", por lo que las etiquetas de índice presentes en una sola Series quedan fuera del resultado; pasa how="outer" para conservar todas las etiquetas y rellenar los huecos con NaN. Para emparejar por valores en lugar de por el índice, convierte las Series en DataFrames y pasa un nombre de columna a on.
Une una Series a un DataFrame con DataFrame.join()
DataFrame.join() es la opción más conveniente cuando un lado ya es un DataFrame. Convierte la primera Series con pd.DataFrame() y luego llama a .join() con la segunda Series; la Series debe tener un name, que se convierte en el encabezado de la nueva columna.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
# Create Series by assigning names
products = pd.Series(
["Intel Dell Laptops", "HP Laptops", "Lenavo Laptops", "Acer Laptops"],
name="Products",
)
dollar_price = pd.Series([350, 300, 400, 250], name="Price")
# join the price series to a DataFrame built from products
df = pd.DataFrame(products).join(dollar_price)
print(df)
Salida:
Products Price
0 Intel Dell Laptops 350
1 HP Laptops 300
2 Lenavo Laptops 400
3 Acer Laptops 250
Al igual que pandas.merge(), DataFrame.join() alinea por el índice, pero usa por defecto un left join, de modo que se conservan todas las filas del DataFrame que invoca el método.
Para resumir la elección de método: recurre a pandas.concat() con axis=1 para construir un DataFrame a partir de Series independientes, usa pandas.concat() a lo largo de axis=0 para la tarea de apilado que antes realizaba Series.append(), usa pandas.merge() cuando las filas deban emparejarse por índice o por valores de clave, y usa DataFrame.join() para adjuntar una Series con nombre a un DataFrame que ya tienes.