什么是pandas中set_value和=之间的区别

时间:2017-04-26 06:46:59

标签: python pandas

在写入pandas中的数据框时,我们发现有两种方法可以执行此操作,由this answerthis answer提供。

我们有

的方法
  • df[r][c].set_value(r,c,some_value)以及
  • 的方法
  • df.iloc[r][c] = some_value

有什么区别?哪个更快?是副本吗?

1 个答案:

答案 0 :(得分:3)

区别在于set_value 返回对象,而赋值运算符将值分配给现有的DataFrame对象。

调用set_value后,您可能会有两个 DataFrame个对象(这并不一定意味着您将拥有两个数据副本,如DataFrame对象可以“互相引用”,而赋值运算符将更改单个DataFrame对象中的数据。

使用set_value似乎更快,因为它可能针对该用例进行了优化,而赋值方法将生成数据的中间切片:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: df=pd.DataFrame(np.random.rand(100,100))

In [4]: %timeit df[10][10]=7
The slowest run took 6.43 times longer than the fastest. This could mean that an intermediate result is being cached
10000 loops, best of 3: 89.5 µs per loop

In [5]: %timeit df.set_value(10,10,11)
The slowest run took 10.89 times longer than the fastest. This could mean that an intermediate result is being cached
100000 loops, best of 3: 3.94 µs per loop

set_value 的结果可能是副本,但documentation对我来说并不是很清楚(<}}:

  

返回:

     

frame:DataFrame

     

如果包含标签对,则将引用调用DataFrame,否则为新对象