Maison  >  Article  >  développement back-end  >  Comment une utilisation incorrecte des affectations chaînées peut-elle conduire à des résultats inattendus chez les pandas ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 06:15:30463parcourir

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>

Utilisez :

<code class="python">df['amount_updated'] = df['amount'].fillna(...)</code>

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>

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>

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>

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!

Déclaration:
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