2015-12-16 21 views
6

使用inplace的指导原则是什么?使用熊猫就地关键字参数指南

例如,

df = df.reset_index() 

df.reset_index(inplace=True) 

相同相同,但不同?

+2

同样的事情。我更喜欢第一种方式来轻松读取旁边的其他行,而这些行并不在就地处理数据帧。 – itzy

回答

5

就产生的DataFrame df而言,这两种方法是相同的。不同之处在于(最大)内存使用率,因为就地版本不会创建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 

正如预期的那样,就地版本是更多的内存效率。

在另一方面,也似乎是在方法之间运行时间的一个非平凡差时的数据尺寸是足够大(例如,在上面的例子):

%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)'返回None fyi - – user3659451

+0

好的,谢谢指出。 –