Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

871
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!