Cómo corregir: las columnas se superponen pero no se especifica el sufijo

En este artículo, corregiremos el error: las columnas se superponen pero no se especifica un sufijo en Python.

Este error ocurre cuando unimos dos marcos de datos de pandas que tienen una o más columnas iguales pero no se especifica un sufijo para diferenciarlos.

Error:

ValueError: las columnas se superponen pero no se especifica el sufijo

Caso de esta ocurrencia de error por un ejemplo:

Python3

# importing pandas
import pandas as pd
# importing numpy
import numpy as np
  
  
sepal_length = [5.1, 4.9, 4.7, 4.6, 5.0,
                5.4, 4.2, 5.3, 4.4, 4.8]
petal_length = [3.3, 4.6, 4.7, 5.6, 6.7, 
                5.0, 4.8, 4.1, 3.6, 4.4]
  
# numpy array of length 7
petal_width = [3.6, 5.6, 5.4, 4.6, 4.4, 
               5.0, 4.9, 5.6, 5.2, 4.4]
  
# DataFrame with 2 columns of length 10
df1 = pd.DataFrame({'sepal_length(cm)': sepal_length,
                    'petal_length(cm)': petal_length})
  
df2 = pd.DataFrame({'sepal_length(cm)': sepal_length,
                    'petal_width(cm)': petal_width})
  
print(df1.join(df2))

Producción:

ValueError: las columnas se superponen pero no se especifica el sufijo: Index([‘sepal_length(cm)’], dtype=’object’)

Motivo del error:

Los marcos de datos df1 y df2 tienen la columna común sepal_length(cm) que es la intersección de dos marcos de datos que no está vacía. Para verificar si hay columnas de intersección:

print(df1.columns.intersection(df2.columns))

Producción:

Index(['sepal_length(cm)'], dtype='object')

sepal_length(cm) es la columna de intersección aquí.

Arreglando el error:

Este error se puede solucionar utilizando el método join() o merge() en los dos marcos de datos.

Método 1: Usar el método join()

Los sufijos deben proporcionarse mientras se usa el método de unión para evitar este error. De forma predeterminada, realiza una unión interna en dos tablas. Esto se puede cambiar mencionando los parámetros en la función join().

Sintaxis :

df1.join(df2, lsuffix='suffix_name', rsuffix='suffix_name')

dónde

  • df1 es el primer marco de datos
  • df2 es el segundo marco de datos

Ejemplo :

Python3

# importing pandas
import pandas as pd
# importing numpy
import numpy as np
  
  
sepal_length = [5.1, 4.9, 4.7, 4.6, 5.0, 5.4,
                4.2, 5.3, 4.4, 4.8]
petal_length = [3.3, 4.6, 4.7, 5.6, 6.7, 5.0,
                4.8, 4.1, 3.6, 4.4]
  
# numpy array of length 7
petal_width = [3.6, 5.6, 5.4, 4.6, 4.4, 5.0,
               4.9, 5.6, 5.2, 4.4]
  
# DataFrame with 2 columns of length 10
df1 = pd.DataFrame({'sepal_length(cm)': sepal_length,
                    'petal_length(cm)': petal_length})
  
df2 = pd.DataFrame({'sepal_length(cm)': sepal_length,
                    'petal_width(cm)': petal_width})
  
print(df1.join(df2, lsuffix='_left', rsuffix='_right'))

Producción:

Método 2:  Usar el método merge()

Este método merge() considera la columna común en los 2 marcos de datos y descarta la columna común en uno de los marcos de datos.

Sintaxis :

pd.merge(df1,df2, how='join_type', on=None, left_on= None, 
right_on = None, left_index =boolean, 
right_index=boolean, sort=boolean)

dónde,

  • df1 es el primer marco de datos
  • df2 es el segundo marco de datos

El tipo de unión y los nombres de las columnas comunes de los marcos de datos izquierdo y derecho también se pueden mencionar como parámetros en la función merge().

Ejemplo:

Python3

# importing pandas
import pandas as pd
# importing numpy
import numpy as np
  
  
sepal_length = [5.1, 4.9, 4.7, 4.6, 5.0, 5.4,
                4.2, 5.3, 4.4, 4.8]
petal_length = [3.3, 4.6, 4.7, 5.6, 6.7, 5.0, 
                4.8, 4.1, 3.6, 4.4]
  
# numpy array of length 7
petal_width = [3.6, 5.6, 5.4, 4.6, 4.4, 5.0, 
               4.9, 5.6, 5.2, 4.4]
  
# DataFrame with 2 columns of length 10
df1 = pd.DataFrame({'sepal_length(cm)': sepal_length,
                    'petal_length(cm)': petal_length})
  
df2 = pd.DataFrame({'sepal_length(cm)': sepal_length,
                    'petal_width(cm)': petal_width})
  
print(pd.merge(df1, df2))

Producción:

Publicación traducida automáticamente

Artículo escrito por lokeshpotta20 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *