J'ai un dataframe de pandas de noms comme indiqué.
personname = df['firstname']+str(' ')+df['othernames'].fillna('')+dfLinks2['surname']
df['personname'] = personname
5 Réponses :
Savez-vous des fonctions de cordes de Python? Vous pouvez combiner ces méthodes avec des pandas.
permet d'utiliser Nous pouvons utiliser pile code> le long de l'index pour supprimer les valeurs nan code>. p> groupeby code> et ''Join code> Pour créer votre colonne Nom complet P> names = (
df["firstname"] + " " + df["othername"].fillna("") + " " + df["surname"]
).replace("\s+", " ", regex=True)
print(names)
0 Sassa Radomirovic
1 Jennifer Catto
2 Jennifer Catto
3 Jennifer Catto
4 Vanessa Pinho
5 Alexander Stuart Clark
6 Alexander Stuart Clark
7 Alexander Stuart Clark
@Datanovice bonnes choses. Trouvé légèrement plus lent. A fait du timing dans ma réponse
Essayez: strong> (pas une bonne solution si) df: strong> p> firstname othername surname name
0 Sassa NaN Radomirovic Sassa Radomirovic
1 Jennifer NaN Catto Jennifer Catto
2 Jennifer NaN Catto Jennifer Catto
3 Jennifer NaN Catto Jennifer Catto
4 Vanessa NaN Pinho Vanessa Pinho
5 Alexander Stuart Clark Alexander Stuart Clark
6 Alexander Stuart Clark Alexander Stuart Clark
7 Alexander Stuart Clark Alexander Stuart Clark
@ Pygirl j'ai besoin de la même chose au travail et j'avais utilisé str.cat () code> méthode comme indiqué ci-dessous. Les méthodes de Datanovice étaient légèrement plus lentes. Voir timing ci-dessous. Toutes mes excuses pour la poste tardive
Essayez: sortie: p>
J'ai besoin de la même chose au travail et j'avais utilisé @wwnde p> str.cat () code> comme indiqué ci-dessous. @Datanovice était légèrement plus lent %timeit (df['firstname'].str.cat(df[['othername', 'surname']], sep=' ', na_rep='').replace('\s\s', ' ', regex=True))
1.54 ms ± 133 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Vous n'êtes pas d'espace après
df ['autres noms'] code>@ komatiraju032 J'ai dit que si j'ajoute un autre
str ('') code> puis ceux qui ont NA dans les noms de colline finissent avec deux espaces par exemple.Jennifer Catto code> que je ne veux pas.Ensuite, utilisez
str.join () code>Vous pouvez également travailler autour de celui-ci par
df ["personname '] = (DF [" premier "] +" "+ df [" autre "]. Fillna (" @ ") +" "+ DF [" Nom de famille " ]). str.replace ("@", "") code>.@Mobeus Zoom j'ai fourni une méthode beaucoup plus rapide. Juste au cas où vous auriez des morceaux de données