2017-10-20 8 views
0

Je joue avec l'ensemble de données Kaggle "European Soccer Database" et je veux le combiner avec un autre jeu de données FIFA18.Comment fusionner deux jeux de données par colonne spécifique dans les pandas

Mon problème est le nom-colonne dans ces deux ensembles de données utilisent un format différent.

Par exemple: « lionel messi » dans un ensemble de données et dans l'autre il est « L. Messi »

Plût à convertir le « L. Messi » à la version minuscule « lionel messi » pour toutes les lignes dans l'ensemble de données.

Quelle serait la manière la plus intelligente d'y parvenir?

+0

Copie possible de [Fusionner deux ensembles de données dans Pandas] (https://stackoverflow.com/questions/43909479/merge-two-datasets-in-pandas) – thatrockbottomprogrammer

+0

Il n'est pas facile de fusionner en fonction d'une correspondance partielle – Dark

Répondre

0

Une façon simple est de convertir les noms dans les deux dataframes dans un format commun afin qu'ils puissent être adaptés. * Supposons que df1 noms sont au format L. Messi et df2 noms sont au format lionel messi. A quoi ressemblerait un format commun? Vous avez plusieurs choix, mais une option serait en minuscules, avec juste la première initiale suivie d'une période: l. messi.

df1 = pd.DataFrame({'names': ['L. Messi'], 'x': [1]}) 
df2 = pd.DataFrame({'names': ['lionel messi'], 'y': [2]}) 

df1.names = df1.names.str.lower() 
df2.names = df2.names.apply(lambda n: n[0] + '.' + n[n.find(' '):]) 

df = df1.merge(df2, left_on='names', right_on='names') 

* Remarque: Cette approche est totalement dépendante des noms étant de cette façon « matchable ». Il y a beaucoup de cas qui pourraient faire échouer cette approche simple. Si une équipe a deux membres, Abby Wambach et Aaron Wambach, ils ressembleront tous les deux à a. wambach. Si une trame de données essaie de les différencier en utilisant d'autres initiales dans leur nom, comme m.a. wambach et a.k. wambach, la correspondance naïve échouera. La façon dont vous gérez cela dépend de la taille de vos données - peut-être que vous pouvez essayer de faire correspondre la plupart des joueurs de cette façon, et voir qui est laissé tomber, et écrire du code personnalisé à partir d'eux.