Le site inplace
paramètre :
df.dropna(axis='index', how='all', inplace=True)
sur Pandas
et en général signifie :
1. Pandas crée une copie des données originales.
2. ... effectue des calculs
3. ... attribue les résultats aux données d'origine.
4. ... supprime la copie.
Comme vous pouvez le lire dans le reste de mes réponses plus bas, nous avons toujours peut ont une bonne raison d'utiliser ce paramètre, c'est-à-dire la inplace operations
mais nous devrions l'éviter si nous le pouvons, car il génère plus de problèmes, comme.. :
1. Votre code sera plus difficile à déboguer (en réalité SettingwithCopyWarning pour vous avertir de ce problème éventuel)
2. Conflit avec le chaînage de méthodes
Donc il y a même des cas où nous devrions déjà l'utiliser ?
Définitivement oui. Si nous utilisons pandas ou n'importe quel outil pour manipuler d'énormes ensembles de données, nous pouvons facilement faire face à la situation où certaines grandes données peuvent consommer toute notre mémoire. Pour éviter cet effet indésirable, nous pouvons utiliser des techniques telles que enchaînement de méthodes :
(
wine.rename(columns={"color_intensity": "ci"})
.assign(color_filter=lambda x: np.where((x.hue > 1) & (x.ci > 7), 1, 0))
.query("alcohol > 14 and color_filter == 1")
.sort_values("alcohol", ascending=False)
.reset_index(drop=True)
.loc[:, ["alcohol", "ci", "hue"]]
)
ce qui rend notre code plus compact (bien que plus difficile à interpréter et à déboguer également) et consomme moins de mémoire car les méthodes enchaînées travaillent avec les valeurs renvoyées par les autres méthodes, ce qui donne lieu à seulement une copie des données d'entrée. Nous pouvons voir clairement, que nous aurons 2 x données originales consommation de mémoire après ces opérations.
Ou nous pouvons utiliser inplace
(bien que plus difficile à interpréter et à déboguer également), notre consommation de mémoire sera de 2 x données originales mais notre consommation de mémoire après cette opération reste 1 x données originales Ce qui, si quelqu'un a déjà travaillé avec d'énormes ensembles de données, sait exactement que cela peut être un grand avantage.
Conclusion finale :
Évitez d'utiliser inplace
à moins que vous ne travailliez pas avec des données volumineuses et que vous soyez conscient des problèmes possibles en cas d'utilisation de ces données.
18 votes
Oui,
inplace=True
renvoie àNone
inplace=False
renvoie une copie de l'objet avec l'opération effectuée. La documentation est assez claire à ce sujet, y a-t-il quelque chose qui prête à confusion dans une partie spécifique ? En particulierIf True, do operation inplace and return None.
0 votes
Je suis en train de sous-classer l'objet DataFrame et avec une opération telle que la fusion, il ne semble pas possible de le faire in situ...
self = self.merge(new_df, how='left', on='column2'
Je ne suis pas sûr qu'il soit possible de réassigner l'auto-assignation1 votes
Vous avez raison de dire que DataFrame.merge n'a pas
inplace
argument. Il retourne un DataFrame, donc pas de problème de réaffectation.1 votes
Quelqu'un peut-il également souligner les avantages de son utilisation en termes de consommation de ressources ?
0 votes
J'ai certainement vu sur SO ou sur un autre site quelqu'un écrire un billet à l'allure prétentieuse commençant par " inplace=True ne signifie pas ce que vous pensez qu'il signifie " (c'est nous qui soulignons). Je suis venu chercher ce message, mais je ne vois pas d'avertissement majeur de la part de la communauté. J'en déduis donc que l'on peut l'utiliser en toute sécurité.
inplace=True
alors que nous l'aurions autrement réassigné à la même variable ?2 votes
Markroxor Il n'y en a pas vraiment beaucoup. Dans quelques cas,
inplace
peut être un peu plus rapide puisque vous n'avez pas à retourner une copie du résultat. Mais c'est à peu près tout. Il y a beaucoup plus de raisons de ne pas l'utiliser.0 votes
Mais il y a aussi ceci : dataschool.io/futur-de-pandas/#inplace