Comment une utilisation incorrecte des affectations chaînées peut-elle conduire à des résultats inattendus chez les pandas ?

Mary-Kate Olsen
Libérer: 2024-10-24 06:15:30
original
479 Les gens l'ont consulté

How Can Incorrect Use of Chained Assignments Lead to Unexpected Results in Pandas?

Assignations chaînées dans Pandas

Lorsque vous travaillez avec des dataframes dans Pandas, les affectations chaînées peuvent conduire à un comportement inattendu ou à des faux positifs, comme l'indique le SettingWithCopyWarning. Cet avertissement vise à alerter les utilisateurs des pièges potentiels liés aux affectations chaînées.

Comment fonctionne l'affectation chaînée

Dans Pandas, la plupart des appels de méthode renvoient une copie de l'objet. Cela signifie que lorsque vous effectuez une affectation chaînée, telle que df['column'] = df['column'].fillna(...), vous modifiez peut-être une copie de la trame de données d'origine plutôt que la trame de données d'origine elle-même.

Effets du chaînage avec .ix(), .iloc() et .loc()

Le choix de ix(), iloc() et loc () peut affecter le comportement des affectations chaînées :

  • ix() est obsolète et ne doit pas être utilisé.
  • iloc() récupère les données à l'aide d'indices entiers. Cette méthode ne peut accéder qu'aux éléments directement et ne prend pas en charge l'affectation chaînée.
  • loc() récupère les données à l'aide d'étiquettes. Les affectations chaînées utilisant loc() créent un nouvel objet, qui peut ou non modifier le dataframe d'origine.

Pratiques de codage optimales

Pour éviter les problèmes potentiels avec affectations chaînées, il est recommandé d'affecter explicitement le résultat de vos opérations à une nouvelle variable. Par exemple, au lieu de :

<code class="python">df['amount'] = df['amount'].fillna(...)</code>
Copier après la connexion

Utilisez :

<code class="python">df['amount_updated'] = df['amount'].fillna(...)</code>
Copier après la connexion

Faux positifs

Certaines affectations enchaînées peuvent déclencher des avertissements même lorsqu'elles le font ne modifie pas la trame de données d'origine. Dans de tels cas, vous pouvez désactiver les avertissements en utilisant :

<code class="python">pd.set_option('chained_assignment', None)</code>
Copier après la connexion

Exemple

Considérez le code suivant :

<code class="python">data['amount'] = data.apply(lambda row: function1(row, date, qty), axis=1) 
data['amount'] = data['amount'].astype(float)</code>
Copier après la connexion

Ce code peut déclencher un SettingWithCopyWarning car data['amount'] est attribué deux fois. Pour résoudre ce problème, attribuez le résultat de la première opération à une nouvelle variable :

<code class="python">temp_amount = data.apply(lambda row: function1(row, date, qty), axis=1) 
data['amount'] = temp_amount.astype(float)</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!