Data Wrangling

Dominando Pandas: Cinco Formas Eficientes de Combinar Columnas de Texto

Spread the love

Combinar eficientemente columnas de texto es una tarea crucial en la manipulación de datos. Este artículo presenta cinco métodos efectivos de Pandas para concatenar columnas de cadenas dentro de un DataFrame, destacando sus fortalezas y debilidades para guiarlo en la selección del enfoque óptimo para sus necesidades específicas.

Tabla de contenido:

El método del operador +

Este enfoque sencillo utiliza el operador + integrado de Python para la concatenación de cadenas. Generalmente es el más rápido para escenarios simples, pero requiere un manejo cuidadoso de los valores faltantes (NaN) para evitar excepciones TypeError.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df['col1'].fillna('') + df['col2'].fillna('')
print(df)

Salida:


  col1 col2 combined
0    A    D      AD
1    B    E      BE
2    C    F      CF
3  NaN    G       G

Método Series.str.cat()

Series.str.cat() está específicamente diseñado para la concatenación de cadenas y maneja eficientemente los datos faltantes. Permite la personalización con separadores y representación de NaN.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df['col1'].str.cat(df['col2'], sep='-', na_rep='')
print(df)

Salida:


  col1 col2 combined
0    A    D      A-D
1    B    E      B-E
2    C    F      C-F
3  NaN    G      -G

Método df.apply()

df.apply() ofrece flexibilidad para operaciones fila a fila (axis=1) o columna a columna (axis=0), permitiendo una lógica de concatenación compleja. Sin embargo, puede ser menos eficiente que el operador + para DataFrames grandes.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df.apply(lambda row: str(row['col1']) + ' ' + str(row['col2']), axis=1)
print(df)

Salida:


  col1 col2 combined
0    A    D      A D
1    B    E      B E
2    C    F      C F
3  NaN    G    nan G

Método Series.map()

Series.map() proporciona una forma flexible de aplicar funciones personalizadas para la concatenación, manejando diversos escenarios como lógica condicional o separadores específicos. Es particularmente útil para reglas de concatenación más intrincadas.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

def combine_strings(x):
  return str(x[0]) + '_' + str(x[1])

df['combined'] = df[['col1', 'col2']].apply(combine_strings, axis=1)
print(df)

Salida:


  col1 col2 combined
0    A    D      A_D
1    B    E      B_E
2    C    F      C_F
3  NaN    G    nan_G

Método df.agg()

Si bien es principalmente para agregaciones, df.agg() puede adaptarse para la concatenación de cadenas. Sin embargo, generalmente es menos eficiente que otros métodos para este propósito específico.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df.agg(lambda x: str(x['col1']) + ' ' + str(x['col2']), axis=1)
print(df)

Salida (similar a df.apply()):


  col1 col2 combined
0    A    D      A D
1    B    E      B E
2    C    F      C F
3  NaN    G    nan G

Conclusión: El método óptimo depende de sus necesidades específicas y del tamaño del conjunto de datos. Para la concatenación básica, el operador + ofrece velocidad. Series.str.cat() sobresale en el manejo eficiente de valores faltantes. Series.map() y df.apply() proporcionan mayor flexibilidad para escenarios complejos, mientras que df.agg() es menos eficiente para esta tarea.

Deja una respuesta

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