2015-12-16 9 views

Antwort

5

In Bezug auf die resultierende DataFrame df, die beiden Ansätze sind die gleichen. Der Unterschied liegt in der (maximalen) Speichernutzung, da die In-Place-Version keine Kopie des DataFrame erstellt.

Betrachten Sie diese Einstellung:

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) 

Wir haben die memory_profile Bibliothek verwenden können einige Benchmarking für die Speicherauslastung auszuführen:

%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 

Wie erwartet, die in-Place-Version mehr Speicher effizient ist.

Auf der anderen Seite scheint es auch zwischen den Ansätzen in Laufzeit ein nicht-trivialer Unterschied zu sein, wenn die Datengröße groß genug ist (zB in dem obigen Beispiel) ist:

%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 

kann diese Unterschiede oder je nach Anwendungsfall (z. B. Adhoc-Explorationsanalyse vs. Produktionscode), Datengröße und verfügbare Hardware-Ressource nicht signifikant. Im Allgemeinen kann es sinnvoll sein, die In-Place-Version nach Möglichkeit zu verwenden, um die Speicher- und Laufzeiteffizienz zu verbessern.

+0

'df.reset_index (inplace = True)' gibt zurück Keine fyi - – user3659451

+0

Richtig, danke für das Hinzeigen. –