Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

874
Vistas
Cómo extraer parte de una cadena en la columna Pandas y crear una nueva columna

Tengo el siguiente marco de datos de pandas.

 d = {'col1': [1, 2,3,4,5,60,0,0,6,3,2,4],'col3': [1, 22,33,44,55,60,1,5,6,3,2,4],'Name': ['2a df a1asd_V1', 'xcd a2asd_V3','23vg aabsd_V1','dfgdf_aabsd_V0','a3as d_V1','aa bsd_V3','aasd_V4','aabsd_V4','aa_adn sd_V15',np.nan,'aasd_V12','aasd120Abs'],'Date': ['2021-06-13', '2021-06-13','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16']} dff = pd.DataFrame(data=d) dff col1 col3 Name Date 0 1 1 2a df a1asd_V1 2021-06-13 1 2 22 xcd a2asd_V3 2021-06-13 2 3 33 23vg aabsd_V1 2021-06-13 3 4 44 dfgdf_aabsd_V0 2021-06-14 4 5 55 a3as d_V1 2021-06-15 5 60 60 aa bsd_V3 2021-06-15 6 0 1 aasd_V4 2021-06-13 7 0 5 aabsd_V4 2021-06-16 8 6 6 aa_adn sd_V10 2021-06-13 9 3 3 NaN 2021-06-13 10 2 2 aasd_V12 2021-06-13 11 4 4 aasd120Abs 2021-06-16

Quiero hacer dos nuevas columnas basadas en la columna Nombre. Quiero extraer la parte de la cadena en la columna Nombre como V1, V2, V3, V4...V20 así. Además, si no hay nada parecido al final de la cadena de Nombre o si la fila de Nombre está vacía, solo quiere hacer una celda vacía. Así que quiero algo como debajo del marco de datos de pandas.

 col1 col3 Name Date Version Version 0 1 1 2a df a1asd_V1 2021-06-13 V1 Version 1 1 2 22 xcd a2asd_V3 2021-06-13 V3 Version 3 2 3 33 23vg aabsd_V1 2021-06-13 V1 Version 1 3 4 44 dfgdf_aabsd_V0 2021-06-14 V0 Version 0 4 5 55 a3as d_V1 2021-06-15 V1 Version 1 5 60 60 aa bsd_V3 2021-06-15 V3 Version 3 6 0 1 aasd_V4 2021-06-13 V4 Version 4 7 0 5 aabsd_V4 2021-06-16 V4 Version 4 8 6 6 aa_adn sd_V10 2021-06-13 V10 Version 10 9 3 3 NaN 2021-06-13 10 2 2 aasd_V12 2021-06-13 V12 Version 12 11 4 4 aasd120Abs 2021-06-16

¿Es posible hacer eso? Sé que en SQL podemos hacer eso usando "LIKE"

 WHEN `Name` LIKE '%V10%' THEN 'Verison 10'.

¿Hay un comando similar o alguna otra forma de hacerlo en python?

¡Gracias por adelantado! ¡Cualquier ayuda es apreciada!

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede usar str.extract y una expresión regular corta ( _(V\d+)$ ):

 dff['Version'] = dff['Name'].str.extract('_(V\d+)$') dff['Version_long'] = 'Version '+dff['Version'].str[1:]

NÓTESE BIEN. Nombré la segunda columna de manera diferente ya que es problemático (aunque no del todo imposible) tener dos columnas con el mismo nombre

producción:

 col1 col3 Name Date Version Version_long 0 1 1 2a df a1asd_V1 2021-06-13 V1 Version 1 1 2 22 xcd a2asd_V3 2021-06-13 V3 Version 3 2 3 33 23vg aabsd_V1 2021-06-13 V1 Version 1 3 4 44 dfgdf_aabsd_V0 2021-06-14 V0 Version 0 4 5 55 a3as d_V1 2021-06-15 V1 Version 1 5 60 60 aa bsd_V3 2021-06-15 V3 Version 3 6 0 1 aasd_V4 2021-06-13 V4 Version 4 7 0 5 aabsd_V4 2021-06-16 V4 Version 4 8 6 6 aa_adn sd_V15 2021-06-13 V15 Version 15 9 3 3 NaN 2021-06-13 NaN NaN 10 2 2 aasd_V12 2021-06-13 V12 Version 12 11 4 4 aasd120Abs 2021-06-16 NaN NaN
over 4 years ago · Santiago Trujillo Denunciar

0

Use str.extract con una expresión regular y str.replace para cambiar el nombre de los valores:

 dff['Version_short'] = dff['Name'].str.extract('_(V\d+)$').fillna('') dff['Version_long'] = dff['Version_short'].str.replace('V', 'Version ')

Producción:

 >>> dff col1 col3 Name Date Version_short Version_long 0 1 1 2a df a1asd_V1 2021-06-13 V1 Version 1 1 2 22 xcd a2asd_V3 2021-06-13 V3 Version 3 2 3 33 23vg aabsd_V1 2021-06-13 V1 Version 1 3 4 44 dfgdf_aabsd_V0 2021-06-14 V0 Version 0 4 5 55 a3as d_V1 2021-06-15 V1 Version 1 5 60 60 aa bsd_V3 2021-06-15 V3 Version 3 6 0 1 aasd_V4 2021-06-13 V4 Version 4 7 0 5 aabsd_V4 2021-06-16 V4 Version 4 8 6 6 aa_adn sd_V15 2021-06-13 V15 Version 15 9 3 3 NaN 2021-06-13 10 2 2 aasd_V12 2021-06-13 V12 Version 12 11 4 4 aasd120Abs 2021-06-16
over 4 years ago · Santiago Trujillo Denunciar

0

Use str.split y str.replace en df.assign en una sola línea

 dff = dff.assign(Version_short=dff['Name'].str.split('([A-Z0-9]+$)').str[-2].fillna(''),Version_lon=dff['Name'].str.split('([A-Z0-9]+$)').str[-2].replace('^\D', 'Version ', regex=True).fillna('')) col1 col3 Name Date Version_short Version_lon 0 1 1 2a df a1asd_V1 2021-06-13 V1 Version 1 1 2 22 xcd a2asd_V3 2021-06-13 V3 Version 3 2 3 33 23vg aabsd_V1 2021-06-13 V1 Version 1 3 4 44 dfgdf_aabsd_V0 2021-06-14 V0 Version 0 4 5 55 a3as d_V1 2021-06-15 V1 Version 1 5 60 60 aa bsd_V3 2021-06-15 V3 Version 3 6 0 1 aasd_V4 2021-06-13 V4 Version 4 7 0 5 aabsd_V4 2021-06-16 V4 Version 4 8 6 6 aa_adn sd_V15 2021-06-13 V15 Version 15 9 3 3 NaN 2021-06-13 10 2 2 aasd_V12 2021-06-13 V12 Version 12 11 4 4 aasd120Abs 2021-06-16
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda