1
votes

modification des données de colonne avec "nom, prénom" en "prénom nom" dans python pandas dataframe

J'ai python pandas dataframe, servi par le support de transformation de source de données power bi pour l'exécution du script python, où l'une des colonnes se compose de lastname, firstname et j'ai besoin qu'elle soit composée de firstname lastname .

J'ai essayé l'approche de jointure inversée suivante qui fonctionne sur un argument de chaîne autonome mais génère AttributeError: l'objet 'Series' n'a pas d'attribut 'split' code > quand je l'essaie sur des données de colonne dans un dataframe pandas.

name = 'LastName, FirstName'
' '.join(reversed(name.split(', ')))
# output = 'FirstName LastName'

import pandas as pd
df = pd.DataFrame({'full_name': ['doe, john', 'smith, kate', 'jones, susan', 'edwards, jack' ],
                   'num_legs': [2, 4, 8, 0],
                   'num_wings': [2, 0, 0, 0],
                   'num_specimen_seen': [10, 2, 1, 8]},
                   index=['falcon', 'dog', 'spider', 'fish'])
df
df['full_name'] = ' '.join(reversed(df['full_name'].split(', ')))
# output = AttributeError: 'Series' object has no attribute 'split'

Recherche SO je vois des résultats pour faire quelque chose de cette nature dans un excel colonne et dans une Liste R mais je n'ai encore rien trouvé pour la colonne dans un dataframe pandas python.


0 commentaires

3 Réponses :


2
votes

Dans votre cas, nous pouvons faire split avec map PS: :: - 1 ici est inversé l'ordre

df.full_name=df.full_name.str.split(', ').map(lambda x : ' '.join(x[::-1]))
df.full_name
falcon        john doe
dog         kate smith
spider     susan jones
fish      jack edwards
Name: full_name, dtype: object


1 commentaires

Je pensais que ma solution serait plus rapide ... mais la profiler sur 50k entrées cette solution a pris 2 secondes, la mienne était de 3,4 (pour fonctionner 10 fois avec timeit)



0
votes

L'erreur est due au fait que le type de la variable type (df ['full_name']) est . Convertissez-le en liste puis utilisez:

import pandas as pd
df = pd.DataFrame({'full_name': ['doe, john', 'smith, kate', 'jones, susan', 'edwards, jack' ],
        'num_legs': [2, 4, 8, 0],
        'num_wings': [2, 0, 0, 0],
        'num_specimen_seen': [10, 2, 1, 8]},
        index=['falcon', 'dog', 'spider', 'fish'])

print(map(lambda x: x.split(',')[::-1], df['full_name'].tolist()))


1 commentaires

merci pour la réponse, quand je lance cela, j'obtiens pour la sortie et la sortie de l'exécution de df.full_name après cela apparaît inchangé



2
votes

Une combinaison des méthodes de chaîne de pandas pourrait aider ici: pour la rapidité, je suggérerais d'exécuter une compréhension de liste dans python lui-même. Les méthodes de chaîne dans Pandas sont fournies principalement pour des raisons de commodité / simplicité.

df['full_name'] = df.full_name.str.split(",").str[::-1].str.join(",")


          full_name     num_legs    num_wings   num_specimen_seen
falcon     john,doe         2           2             10
dog        kate,smith       4           0             2
spider     susan,jones      8           0             1
fish       jack,edwards     0           0             8


0 commentaires