J'ai un cadre de données contenant une colonne avec différents noms. J'extrais des caractéristiques de ces noms et les stocke dans un dictionnaire. Ensuite, je veux créer une colonne pour chaque caractéristique et y stocker des valeurs pour chaque nom. J'ai du mal à obtenir ma boucle correcte.
Mon code:
import pandas as pd
data = pd.DataFrame(['Mike', 'Ester', 'Sarah'])
data.columns = ['name']
def get_features(name):
features = {}
features["lettreinitiale"] = name[0].lower()
features["lettrefinale"] = name[-1].lower()
return features
for name in data['name']:
features = get_features(name)
print features
for f,v in features.items():
data[f] = v
data.head()
Je reçois:
name lastletter firstletter
0 Mike h s
1 Ester h s
2 Sarah h s
J'ai besoin de:
name lastletter firstletter
0 Mike e m
1 Ester r e
2 Sarah h s
Je comprends pourquoi tous les noms reçoivent des valeurs du dernier nom mais je ne peux pas comprendre comment le corriger. Je peux probablement créer de nouveaux en-têtes pour toutes les caractéristiques d'abord puis mettre à jour mon cadre de données mais j'espère qu'il y a une méthode plus intelligente. J'apprécierai votre aide!
ÉDIT: Ma fonction de caractéristiques est beaucoup plus compliquée que juste la première/dernière lettre. Elle contient environ 20 caractéristiques différentes donc j'ai vraiment besoin de construire un dictionnaire...
def get_features(name):
features = {}
features["lettreinitiale"] = name[0].lower()
features["lettrefinale"] = name[-1].lower()
features["hythen"] = ("-" in name.lower())
features["suffixe"] = name[-2:].lower()
features["préfixe"] = name[0:2].lower()
features["longueur"] = len(name)
for lettre in 'abcdefghijklmnopqrstuvwxyz':
features["compter(%s)" % lettre] = name.lower().count(lettre)
features["possède(%s)" % lettre] = (lettre in name.lower())
return features