2015-12-16 1 views

Répondre

5

En termes de DataFrame résultant df, les deux approches sont les mêmes. La différence réside dans l'utilisation de la mémoire (maximale), car la version in-situ ne crée pas de copie du DataFrame.

considérerais cette configuration:

import numpy as np 
import pandas as pd 

def make_data(): 
    return pd.DataFrame(np.random.rand(1000000, 100)) 

def func_copy(): 
    df = make_data() 
    df = df.reset_index() 

def func_inplace(): 
    df = make_data() 
    df.reset_index(inplace=True) 

Nous pouvons utiliser la bibliothèque memory_profile pour effectuer une analyse comparative pour l'utilisation de la mémoire:

%load_ext memory_profiler 

%memit func_copy() 
# peak memory: 1602.66 MiB, increment: 1548.66 MiB 

%memit func_inplace() 
# peak memory: 817.02 MiB, increment: 762.94 MiB 

Comme prévu, la version en place est plus efficace mémoire.

D'autre part, il semble aussi être une différence non négligeable dans le temps en cours d'exécution entre les approches lorsque la taille des données est assez grand (par exemple, dans l'exemple ci-dessus):

%timeit func_copy() 
1 loops, best of 3: 2.56 s per loop 

%timeit func_inplace() 
1 loops, best of 3: 1.35 s per loop 

Ces différences peuvent ou peut ne pas être significatif selon le cas d'utilisation (par exemple, analyse exploratoire adhoc par rapport au code de production), la taille des données et la ressource matérielle disponible. En général, il peut être judicieux d'utiliser la version en place chaque fois que possible pour améliorer l'efficacité de la mémoire et de l'exécution.

+0

'df.reset_index (inplace = True)' renvoie Aucun. Fyi - – user3659451

+0

Bon, merci de m'avoir signalé. –