J'ai un bloc de données qui ressemble à ceci:
File "<ipython-input-29-d9457f9cb172>", line 6
else df.Title[i].str.contains("Manager"):
^
SyntaxError: invalid syntax
Je veux parcourir le bloc de données et en utilisant df.str.contains créer une autre colonne qui catégorisera ces emplois. Il y a 8 catégories.
Le résultat sera:
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"
voici ce que j'ai essayé jusqu'à présent:
name Title category abc 'Tech support' 'Support' xyz 'UX designer' 'Design' ghj 'Manager IT' 'Management' ... .... ....
4 Réponses :
Syntaxe générale de python if instruction est:
else:
df.category[i]=="Others"
Comme vous pouvez le voir dans la syntaxe, pour évaluer une expression de test , elle doit être dans le if ou dans la construction elif . Le code renvoie l'erreur de syntaxe lorsque l'expression de test est placée dans la construction else . Pensez à changer le dernier else en elif et ajoutez un cas de secours pour l'erreur comme:
if test expression:
Body of if
elif test expression:
Body of elif
else:
Body of else
Vous pouvez faire quelque chose comme ceci:
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)
)
Cette implémentation peut-elle être sensible à la casse? c'est-à-dire que le Support technique et le support technique seront classés comme Support sans ajouter un autre élément au dictionnaire.
@DevarshiGoswami oui, il suffit de passer re.IGNORECASE à extract , c'est-à-dire .str.extract ("...", re.IGNORECASE) .
Cette réponse: Itérer les lignes et changer la valeur devrait vous aider!
Lmk, si vous avez d'autres questions!
Voilà:
name Title Category 0 abc Tech support Support 1 xyz UX designer Design 2 ghj Manager IT Management
Résultat:
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)
J'obtiens cette erreur si j'utilise votre extrait. TypeError: entrée invalide 0 dans condlist: doit être booléen ndarray à la ligne df ['Category'] = np.select (masks, values, default = 'Unknown')
@DevarshiGoswami Ajout du code complet. Pourriez-vous s'il vous plaît vérifier?
Merci, je vais jeter un œil. :RÉ
elsedoit également être unelifla syntaxe correcte de Python est
elif:etelse:. Vous avez oublié:.