2015-12-16 12 views

答えて

5

結果のデータフレームdfに関して、2つのアプローチは同じです。インプレースバージョンではDataFrameのコピーが作成されないため、(最大)メモリ使用量に違いがあります。

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) 

私たちは、メモリ使用量のために、いくつかのベンチマークを実行するためにmemory_profileライブラリを使用することができます:

%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 

予想したように、インプレースバージョンは、より多くのメモリ効率的である

は、この設定を検討してください。一方、また、データのサイズは(上記の例ではEG)十分な大きさのアプローチの間の時間を実行中の非自明な差があるように思わ

%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 

これらの違いもよいです使用事例(例えば、アドホック探索分析対生産コード)、データサイズ、利用可能なハードウェアリソースによっては重要ではないかもしれない。一般的に、可能な限りインプレースバージョンを使用して、メモリとランタイムの効率を向上させることをお勧めします。

+0

'df.reset_index(inplace = True)'が返されませんfyi- – user3659451

+0

ありがとうございました。 –

関連する問題