Tengo un marco de datos que se ve así:

   name             Title
    abc          'Tech support'
    xyz          'UX designer'
    ghj          'Manager IT'
     ...            ....

Quiero iterar a través del marco de datos y usar df.str.contains hacer otra columna que clasifique esos trabajos. Hay 8 categorías.

El resultado será:

name              Title             category
abc           'Tech support'         'Support' 
xyz           'UX designer'          'Design'
ghj           'Manager IT'           'Management'
...              ....              ....

Esto es lo que he probado hasta ahora:

for i in range(len(df)):
    if   df.Title[i].str.contains("Support"):
            df.category[i]=="Support"
    elif df.Title[i].str.contains("designer"):
            df.category[i]=="Design"
    else df.Title[i].str.contains("Manager"):
            df.category[i]=="Management"

Por supuesto, soy un novato en programación y esto arroja el error:

  File "<ipython-input-29-d9457f9cb172>", line 6
    else df.Title[i].str.contains("Manager"):
          ^
SyntaxError: invalid syntax
1
Devarshi Goswami 25 jun. 2020 a las 18:49

4 respuestas

La mejor respuesta

Puedes hacer algo como esto:

cat_dict = {"Support":"Support", "designer":"Designer", "Manager": "Management"}

df['category'] = (df['Title'].str.extract(fr"\b({'|'.join(cat_dict.keys())})\b")[0]
                    .map(cat_dict)
                 )
2
Quang Hoang 25 jun. 2020 a las 15:55

Esta respuesta: ¡Iterar a través de filas y cambiar el valor debería ayudarlo!

Lmk, si tienes más preguntas!

1
JCSommer 25 jun. 2020 a las 15:56

Sintaxis general de python si la declaración es:

if test expression:
     Body of if
elif test expression:
     Body of elif
else: 
     Body of else

Como puede ver en la sintaxis, para evaluar una expresión de prueba , debe estar en if o en la construcción elif . El código arroja el error de sintaxis a medida que la expresión de prueba se coloca en la construcción else . Considere cambiar el último else a elif y agregue un caso alternativo para errores como:

else:
    df.category[i]=="Others"
1
foo 25 jun. 2020 a las 16:04

Aquí tiene:

import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO("""
name             Title
abc          Tech support
xyz          UX designer
ghj          Manager IT
"""), sep='\s{2,}', engine='python')

masks = [df.Title.str.lower().str.contains('support'),
    df.Title.str.lower().str.contains('designer'),
    df.Title.str.lower().str.contains('manager')
]

values = [
    'Support',
    'Design',
    'Management'
]

import numpy as np

df['Category'] = np.select(masks, values, default='Unknown')
print(df)

Salida:

  name         Title    Category
0  abc  Tech support     Support
1  xyz   UX designer      Design
2  ghj    Manager IT  Management
1
Balaji Ambresh 26 jun. 2020 a las 05:43