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.
3 Réponses :
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
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)
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()))
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é
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