Maison > développement back-end > Tutoriel Python > Est-ce que `inplace=True` dans les pandas est nocif ?

Est-ce que `inplace=True` dans les pandas est nocif ?

DDD
Libérer: 2024-11-25 09:37:16
original
318 Les gens l'ont consulté

Is `inplace=True` in pandas Harmful?

Chez les pandas, inplace = True est-il considéré comme nocif, ou non ?

En bref, oui, inplace = True est considéré nocif chez les pandas. Ce problème GitHub propose explicitement de déprécier l'argument inplace à l'échelle de l'API dans un avenir proche. Voici quelques raisons pour lesquelles :

  • De toute façon, des copies sont souvent créées : Contrairement à son nom, inplace = True n'empêche souvent pas la création de copies. Il n’offre (presque) jamais aucun avantage en termes de performances. La plupart des versions sur place et hors place d'une méthode créent indépendamment une copie des données, la version sur place attribuant automatiquement la copie.
  • Entrave au chaînage des méthodes : Inplace = True entrave également le chaînage des méthodes. Comparez le fonctionnement de :
result = df.some_function1().reset_index().some_function2()
Copier après la connexion

Par opposition à :

temp = df.some_function1()
temp.reset_index(inplace=True)
result = temp.some_function2()
Copier après la connexion
  • Pièges involontaires : L'appel sur place = True peut déclencher le SettingWithCopyWarning , ce qui peut provoquer un comportement inattendu :
df = pd.DataFrame({'a': [3, 2, 1], 'b': ['x', 'y', 'z']})

df2 = df[df['a'] > 1]
df2['b'].replace({'x': 'abc'}, inplace=True)
# SettingWithCopyWarning: 
# A value is trying to be set on a copy of a slice from a DataFrame
Copier après la connexion

De plus, il convient de noter que les opérations pandas sont par défaut inplace = False pour une raison. Cela permet une syntaxe chaînée/fonctionnelle (par exemple, df.dropna().rename().sum()), évite les vérifications coûteuses de SettingWithCopy et fournit un comportement cohérent en coulisses.

Par conséquent, il est généralement recommandé de évitez d'utiliser inplace = True sauf si vous en avez un besoin spécifique.

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal