J'ai un cadre de données pandas avec deux colonnes. J'ai besoin de modifier les valeurs de la première colonne sans affecter la seconde et de récupérer l'intégralité du bloc de données avec uniquement les valeurs de la première colonne modifiées. Comment puis-je faire cela en utilisant Appliquer dans les pandas?
python
pandas
dataframe
python-3.5
Amani
la source
la source
apply
dans une situation comme celle-ci. Opérez directement sur la colonne.apply
autant que possible. Si vous n'êtes pas sûr de devoir l'utiliser, ce n'est probablement pas le cas. Je recommande de jeter un œil à Quand devrais-je jamais vouloir utiliser pandas apply () dans mon code? .Réponses:
Étant donné un exemple de trame
df
de données:ce que vous voulez c'est:
qui renvoie:
la source
apply
ne devrait jamais être utilisé dans une situation comme celle-ciapply
utilise en général une boucle interne sur les lignes qui est beaucoup plus lente que les fonctions vectorisées, comme par exempledf.a = df.a / 2
(voir la réponse de Mike Muller).Pour une seule colonne mieux à utiliser
map()
, comme ceci:la source
map()
mieux queapply()
pour une seule colonne?df['file_name'] = df['Path'].map(lambda a: os.path.basename(a))
Vous n'avez absolument pas besoin d'une fonction. Vous pouvez travailler directement sur une colonne entière.
Exemples de données:
La moitié de toutes les valeurs de la colonne
a
:la source
Bien que les réponses données soient correctes, elles modifient la trame de données initiale, ce qui n'est pas toujours souhaitable (et, étant donné que l'OP a demandé des exemples "en utilisant
apply
", il se pourrait qu'ils voulaient une version qui renvoie une nouvelle trame de données, tout commeapply
).Ceci est possible en utilisant
assign
: il est valable pourassign
les colonnes existantes, comme l'indique la documentation (c'est moi qui souligne):En bref:
Notez que la fonction transmettra toute la trame de données, pas seulement la colonne que vous souhaitez modifier, vous devrez donc vous assurer de sélectionner la bonne colonne dans votre lambda.
la source
Si vous êtes vraiment préoccupé par la vitesse d'exécution de votre fonction d'application et que vous avez un énorme ensemble de données sur lequel travailler, vous pouvez utiliser swifter pour accélérer l'exécution, voici un exemple pour swifter sur le cadre de données pandas:
Cela permettra à tous vos cœurs de processeur de calculer le résultat, ce qui sera beaucoup plus rapide que les fonctions d'application normales. Essayez de me faire savoir si cela vous est utile.
la source
Permettez-moi d'essayer un calcul complexe en utilisant datetime et en considérant les null ou les espaces vides. Je réduis 30 ans sur une colonne datetime et utilise la
apply
méthode ainsi quelambda
et convertis le format datetime. La ligneif x != '' else x
prendra soin de tous les espaces vides ou nuls en conséquence.la source